ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

【Unityで2DRPG】 シーンごとにBGMを切り替える方法

Unity で 2DRPG 作りに奮闘してます。
今回は町や洞窟、戦闘などなどシーンが切り替わるときにBGMを切り替えると雰囲気が出ると思ったので切り替える方法を調べてみました。
今回はメモ程度に。。。後日詳しく書きたいと思います。

準備

音源取得

音源を作ることができないため、以下のサイトから音源をお借りします。
dova-s.jp

設定

音源登録

AudioManager という GameObject にお借りしたBGM(BGM019_-_街RPG風1)を追加します。

「AudioManager」の「Inspector」に追加したBGMを登録します。
f:id:a1026302:20201127163027j:plain

AudioManager スクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AudioManager : MonoBehaviour
{   
    public AudioSource[] sfx;
    public AudioSource[] bgm;

    public static AudioManager instance;

    // Start is called before the first frame update
    void Start()
    {
        instance = this;

        DontDestroyOnLoad(this.gameObject);
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    public void PlaySFX(int soundToPlay)
    {   
        if(soundToPlay < sfx.Length)
        {
            sfx[soundToPlay].Play();
        }
    }

    public void PlayBGM(int musicToPlay)
    {      
        if(!bgm[musicToPlay].isPlaying)
        {
            StopMusic();

            if(musicToPlay < bgm.Length)
            {
                bgm[musicToPlay].Play();
            }
        }
    }

    public void StopMusic()
    {
        for(int i = 0; i < bgm.Length; i++)
        {
            bgm[i].Stop();
        }
    }
}

各シーンに音源を登録

各シーンに配置したCameraControllerというスクリプトに登録したBGMの配列の番号を入力します。
f:id:a1026302:20201127163620j:plain
以下BGMを流す部分です。(関係ない部分は省略)

 ・
 ・
 ・
    public int musicToPlay;
    private bool musicStarted;
 ・
 ・
 ・
        if(!musicStarted)
        {
            musicStarted = true;
            AudioManager.instance.PlayBGM(musicToPlay);
        }

デモプレイ

プレイ動画をアップロードしました。
www.youtube.com