AudioMixer の SetFloat は Awake では動作しない

AudioMixer SetFloat

AudioMixer のボリュームを設定する時に Awake で SetFloat して初期化しようとした所,動かなかった.
原因としてはこれ.

forum.unity.com

昔からある問題.

解決方法

Start () で呼ぶのが単純な解決方法だが, Awake () を使わざるを得ない時がある.
その場合は,await UniTask.Yield(PlayerLoopTiming.LastInitialization); を挟んでから,
AudioMixer の SetFloat をすると動きます.以下サンプルスクリプト.参考までに.

        public async UniTaskVoid Awake()
        {
            // AudioMixer.SetFloat は Awake 段階では発動しないバグがあるため,タイミング調整
            await UniTask.Yield(PlayerLoopTiming.LastInitialization);
            // マスター音量を設定する 
            audioMixer.SetFloat(VolumeNameConstants.MASTER_VOLUME, masterVolume);
        }

参考資料

Unity の Audio 機能はこちらの資料を読めば完璧.
スライドに書いてあるリポジトリもコードリーディングするとなおよし.

www.slideshare.net