前回まででタイトル画面がひと段落したので、今度は設定画面の作成をしよう。
設定といってもこのゲーム、調整があるのは音量調整くらい。
あとは、PCでプレイするときには、スマホ用に用意するバーチャルコントローラーは邪魔になるから
これは消せる様にしておきたい。
で、パパッと配置を決める。
・・・とはいかなくて、実際にはこの画面の配置を作るだけで、ほぼ2日かかりました🤣
ボリューム調整用のボタンがどうにも気に入らなくて、色々と変えているうちに、時間だけがどんどん過ぎていったわけで🤪
まぁ、何はともあれ画面はできたので、あとはこれを実際に機能するように作り込んでいく。
まずはボリューム調整機能。
以前にシューティングゲームを作った時に学んだ事だし😆
コピペでどうにかなるでしょ。
・・・と思ったんだけど、なぜかボリューム調整ができない😅
備忘録のために、前回のスクリプトを記事に残したというのに😅
初期の頃の記事のせいか、肝心なことは何にも記録してない😭
参考にした記事の記録もない😭
ぼやいてても仕方ないので、今の状況の確認をする事にしよう。
スライダーは動く。スライダーの値もfloat型の変数に取得できている。
スライダーの値が変わった時に発動するコールバックSlider.onValueChanged.AddListenerも動いている。
でも、肝心のAudio Mixerの値が取得できてないし、スライダーの値をAudio Mixerに反映できていない。
気づいたら、ちょうど時間が21:00だったので、
困ったときの、スタジオしまづさんのオンラインサロン〜🙇
21:00から毎日開催されているユニコンで、ジョニさんに教えを乞い、なんとか解決できました😆
数ヶ月前に作ったばかりなのに、やっぱり、すっかり記憶から抜けるもんだね💦
という事で、今回の備忘録は、ちゃんと各Objectのインスペクターもしっかり残しておこう。
参考にした記事は、これ。
今回うまくいかなかったのは、この「Exposed Parameters」とやらを作成し忘れていたから💦
スライダーの設定については、今回参考にした記事と、シューティングゲームの時のスクリプトでは、
スライダー操作の仕方や、音量を段階的な設定にするかなど、コンセプトが違う。
シューティングゲームの時のスクリプトでの場合は、スライダーのインスペクターはこうなっている。
Interactableのチェックを外すことで、手動操作ではスライダーの変更をできなくする。
総数にチェックを入れることで、スライダーのValueを整数値に制限し、
Min ValueとMax Valueは、Audio Mixerのボリューム値の-80〜0の範囲を1/10にした値で設定する。
これでボリュームの調整は9段階に制限できる。
スクリプトは、シューティングゲームの時のスクリプト(といっても、これもどこかのサイトのほぼ丸コピーだったはず😅)
から、ちょこっと変更。
Audio Clipは専用 のScriptable Objectsを作成して、参照する様に変更した。
using UnityEngine; using UnityEngine.Audio; using UnityEngine.UI; public class SettingMenu : MonoBehaviour { [SerializeField] AudioMixer audioMixer; [SerializeField] Slider BGMSlider; [SerializeField] Slider SESlider; [SerializeField] AudioSource BGMaudio; [SerializeField] AudioSource SEaudio; void Start() { //AudioMixerのBGMボリュームをBGMスライダーに取り込み。 audioMixer.GetFloat("BGM", out float bgmVolume); BGMSlider.value = Mathf.Round(bgmVolume/10); //9段階になるように四捨五入 //AudioMixerのSEボリュームをSEスライダーに取り込み。 audioMixer.GetFloat("SE", out float seVolume); SESlider.value = Mathf.Round(seVolume / 10); //9段階になるように四捨五入 //スライダーの値が変化した時の処理を登録 BGMSlider.onValueChanged.AddListener(SetAudioMixerBGM); SESlider.onValueChanged.AddListener(SetAudioMixerSE); } public void SetAudioMixerBGM(float value) { BGMaudio.Stop(); var volume = value*10;//スライダーの値を10倍にして audioMixer.SetFloat("BGM", volume);//AudioMixerのBGMのボリュームに設定 BGMaudio.Play(); } public void SetAudioMixerSE(float value) { var volume = value * 10;//スライダーの値を10倍にして audioMixer.SetFloat("SE", volume);//AudioMixerのSEのボリュームに設定 SEaudio.PlayOneShot(AudioSO.Entity.TestSE);//テストのため、効果音を鳴らす。 } }
これでAudio Mixerとスライダーの連携はできたので、
次回でスライダーの値を変更するための、ボタンの処理を作っていこう。