環境
Unity 2019.3.7f1
はじめに
図のように特定のシーンでだけBGMを変更する方法です。
次の知識の組み合わせで設定できます。
・シングルトン設定
・シーン遷移
・if文の複数条件
・音楽再生
音の基本
marumaro7.hatenablog.com
・デリゲート
参考記事
nn-hokuson.hatenablog.com
・関数
関数の基本
marumaro7.hatenablog.com
コード
空のオブジェクトにこのコードを割り当てて使用する。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; //追加!! public class test5 : MonoBehaviour { //シングルトン設定ここから static public test5 instance; private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(this.gameObject); } else { Destroy(this.gameObject); } } //シングルトン設定ここまで public AudioSource A_BGM;//AudioSource型の変数A_BGMを宣言 対応するAudioSourceコンポーネントをアタッチ public AudioSource B_BGM;//AudioSource型の変数B_BGMを宣言 対応するAudioSourceコンポーネントをアタッチ private string beforeScene;//string型の変数beforeSceneを宣言 void Start() { beforeScene = "Scene1";//起動時のシーン名 を代入しておく A_BGM.Play();//A_BGMのAudioSourceコンポーネントに割り当てたAudioClipを再生 //シーンが切り替わった時に呼ばれるメソッドを登録 SceneManager.activeSceneChanged += OnActiveSceneChanged; } //シーンが切り替わった時に呼ばれるメソッド void OnActiveSceneChanged(Scene prevScene, Scene nextScene) { //シーンがどう変わったかで判定 //Scene1からScene2へ if (beforeScene == "Scene1" && nextScene.name == "Scene2") { A_BGM.Stop(); B_BGM.Play(); } // Scene1からScene2へ if (beforeScene == "Scene2" && nextScene.name == "Scene1") { A_BGM.Play(); B_BGM.Stop(); } //遷移後のシーン名を「1つ前のシーン名」として保持 beforeScene = nextScene.name; } }
ポイント
・シングルトンのオブジェクトにする。
・現在のシーンと遷移先のシーンが一致したタイミングで音声を切換え
おわりに
void OnActiveSceneChanged(Scene prevScene, Scene nextScene)
のprevSceneの引数の情報はうまく扱えなかったので使用していません。