3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】特定のシーンに移ったタイミングでBGMを変更する方法

Last updated at Posted at 2020-05-01

#環境
Unity 2019.3.7f1

#はじめに
図のように特定のシーンでだけBGMを変更する方法です。
image.png

次の知識の組み合わせで設定できます。
・シングルトン設定
・音楽再生
音の基本: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の引数の情報はうまく扱えなかったので使用していません。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?