AddressablesにAudioMixer依存が混入したら落とすUnitTest

Addressablesに登録したアセット(主に Prefab)がAudioMixer/AudioMixerGroupを参照していると、
ロード順によってAudioMixerが複数ロードされ、
パラメーター変更を行なっても反映されないな?みたいな事故が起こりがちです。

そもそも、AudioMixer/AudioMixerGroupの参照を持ったPrefabを
Addressables/AssetBundleにした時の挙動を正しく把握するのが面倒すぎるんですよね。
ランタイムによしなに拾ってきてaudioSource.outputAudioMixerGroupに設定するのが楽です。


↑これだけでAddressableにAudioMixerが丸っと含まれる。
いや、いい感じに1つのAudioMixer参照してよ・・・。

というわけで、こんな感じのテストで落としておけば安心です。
ついでにランタイムでAudioMixer拾ってくるスクリプトが張り付いているかもチェックしておくと尚安心。

AddressableTest.cs
using System.Linq;
using NUnit.Framework;
using UnityEditor;
using UnityEditor.AddressableAssets;

public class AddressableTest
{
    [Test]
    public void Addressables_Should_Not_Depend_On_AudioMixer()
    {
        var settings = AddressableAssetSettingsDefaultObject.Settings;

        var entries = settings.groups
            .SelectMany(g => g.entries)
            .Where(e => !AssetDatabase.IsValidFolder(e.AssetPath))
            .ToList();

        foreach(var entry in entries)
        {
            var deps = AssetDatabase.GetDependencies(entry.AssetPath, true);
            if (deps.Any(d => d.EndsWith(".mixer")))
            {
                Assert.Fail($"Addressable '{entry.address}' depends on AudioMixer: {entry.AssetPath}");
            }
        }
    }
}