読者です 読者をやめる 読者になる 読者になる

ロードバイク時々ものづくり

ロードバイクおよびゲーム開発について

Unityでのオプション画面作成メモ

Unity

STEEL STRIKERの完成版に向け、オプション画面を作成。
その内容のメモ。

オプション仕様

  • 音量設定:BGM,SE,ボイスで分ける
  • カメラ設定:カメラの上下の操作を逆にできる
  • 旋回設定:旋回時の設定を逆にする

音量設定

オプション画面で音量を変更・セーブし、タイトル画面でロードを行なう。
セーブやロードは「PlayerPrefs」を使用。

セーブについて

PlayerPrefs.SetFloat("BGM Volume", bgmVolume);

一つ目の値にはキーをストリング型で入れ、2つ目の値に保存したい値を入れる。
Float型、Int型、String型の保存とロードが可能。
セーブタイミングはオプション画面を抜けるときに1度行なう。

ロードについて

bgmVolume = PlayerPrefs.GetFloat("BGM Volume", 80);

一つ目の値にはキーを入れて変数へロードする。2つ目の値は、セーブデータがなかった場合のデフォルト値として設定できる(省略可)。
ロードタイミングはタイトル画面。念のためオプション画面でもロードを行なう。

参考

カテゴリ毎の音量設定

通常オーディオの音量を調整する場合は、Audio.volumeを使用して音量調整をするため、散らばったAudio Sourceを登録したマネージャーで制御することを考えた。
ちょっとめんどくさいし何かあるだろうと調べたらやっぱりあった。

Audio Mixerで管理

Audio MixerにBGM、SE、ボイスの3種のグループに分け、Audio Sourceをグループに振り分けておくと一括で音量の調整ができる。
Audio Sourceの音量と干渉しないので、一時的にフェードアウトさせたいときや音ごとに音量の調整をしたいときにも便利。
音量設定のロード時にAudio Mixerへ値を反映するだけで設定が反映されるので非常にラクとなる。

スクリプトでの設定は以下の通り。

audioMixer.SetFloat("BGMVolume", bgmVolume - 80);

ー80 ~ 20の間の値で設定する。

Audio Mixerのグループへの登録漏れがあると反映されないので注意。

参考

シーン間をまたいでもBGMを継続して再生する

シーンごとにBGMのAudio Sourceを設定している場合、同じ曲でも頭から再生されてしまう。
継続して再生させたい場合、BGMのオブジェクトを破壊せずに保持したままにする。
BGM用のAudio SourceのあるBGMのオブジェクトを別オブジェクトとし、

DontDestroyOnLoad (this);

を記述してシーンを遷移してもオブジェクトが残ったままにする。
違うBGMを設定しているシーンに移動する場合はDestroyで破棄すればいい。

このまま使用するBGMのシーンごとにBGMオブジェクトを配置しておくと、シーン遷移ごとにオブジェクトが増えていってしまうため、BGMオブジェクトをプレハブ化しておき、オブジェクトがなければ追加するようにした。

AudioSource BGM;
GameObject bgm;
	
void Start () {
	
	bgm = GameObject.FindWithTag("BGM");
		
	if(bgm == null)
	{
		bgm = Instantiate(menuBGM) as GameObject;
	}
		
	BGM = bgm.GetComponent<AudioSource>();
}

参考

コントローラ設定について

セーブタイミングはオプション画面を抜けたときのみ。
セーブ時にブーリアン型がないのでInt型で保存しておく。
ロードは操作の共通スクリプトの頭で行う。