サウンドを管理するオブジェクトの作成
SoundManagerオブジェクトを作成し、SoundManager.csを作成してアタッチします。
さらにAudioSourceコンポーネンを追加しておきます。Play On AwakeをOFFにしてLoopをONにしておきます。
SoundManagerもGameManagerと似たようなコードですが、AudioSourceコンポーネントを取得する処理とBGMを再生するメソッドだけ実装しておきます。
public class SoundManager : MonoBehaviour { public static SoundManager instance; private AudioSource audioSource; private void Awake() { if (instance == null) { instance = this; audioSource = GetComponent<AudioSource>(); DontDestroyOnLoad(this); } else { Destroy(gameObject); } } private void PlayBgm(AudioClip audioClip) { if (audioSource.clip != audioClip) { audioSource.clip = audioClip; audioSource.Play(); } } }
PlayBGMでは同じBGMのクリップの場合は再生しないようにしています。
BGMを再生する準備
SoundManager.csにサウンド素材をアウトレット接続するためのメンバ変数を追加してアウトレット接続します。
SoundManagerスクリプトにBGMを再生するためのメソッドを追加します。
再生したいBGMを追加するときはつどメソッドを作成します。
今回はとりあえずタイトルシーンでBGMを再生するための処理を追加します。
SoundManager.cs
public AudioClip titleBGM;
タイトルBGMのクリップのメンバ変数を作って、アウトレット接続しておきます。
public void PlayTitleBGM() { PlayBgm(titleBGM); }
タイトルシーンでBGMを再生するときに呼び出すメソッドを作ります。
再生の処理はさきほど作っておいたPlayBGMメソッドを使います。
効果音を再生する準備
ボタンをタッチしたときに効果音を再生するためのメソッドも準備しておきます。
これも必要になったらつどメソッドを作成します。
SoundManager.cs
public AudioClip touchSE;
BGMと同じように効果音のクリップのメンバ変数を作って、アウトレット接続しておきします。
public void PlayTouchSE() { audioSource.PlayOneShot(touchSE); }
効果音の再生はPlayOneShotメソッドを使います。
プレハブしておくちょっと便利
GameManagerオブジェクトやSoundManagerオブジェクトにアウトレット接続などをしたいときに、いちいちUnity上でタイトルシーンに切り替えるのは面倒臭いのでプレハブにしておきます。
プレハブのほうにアウトレット接続などをすればタイトルシーンに作ってあるオブジェクトにも反映されるようになります。