#環境
Unity 2019.3.7f1
#はじめに
図のように特定のシーンでだけBGMを変更する方法です。
次の知識の組み合わせで設定できます。
・シングルトン設定
・音楽再生
音の基本:https://qiita.com/Maru60014236/items/94a017ae59306929dbfb
・デリゲート
参考記事:http://nn-hokuson.hatenablog.com/entry/2017/05/29/204702
・関数
関数の基本:https://qiita.com/Maru60014236/items/412925cdefd7a462caf8
・シーン遷移
・if文の複数条件
#コード
空のオブジェクトにこのコードを割り当てて使用する。
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の引数の情報はうまく扱えなかったので使用していません。