[Unity] GameObjectが消えても効果音が鳴り続けるようにする
UnityでAudioSourceを使って効果音を鳴らすとき、AudioSource自体が破棄されてしまうとこのAudioSourceから鳴っている効果音も同時に止まります。
たとえばオブジェクトが破棄されるときに爆発音を鳴らそうとすると、鳴った瞬間に音が止まってしまうためまったく音が聞こえなくなってしまいます。
また、GUIの操作音が途中で消えてしまうなんてこともありえます。
これを回避するには、AudioSourceをシーン中にひとつだけ持たせ、そこで一元管理すればできます。
この方法は3D音源を扱う場合には適さないですが、2DゲームやGUIの効果音を鳴らす場合には十分だと思います。
手順は以下のとおり。
1.空のゲームオブジェクトを作成する
2.AudioSourceコンポーネントをオブジェクトに追加
3.効果音再生処理を希望のタイミングで実行(下記参照)
AudioClip clip; ・・・ 中略 ・・・ GameObject.FindObjectOfType<AudioSource>().PlayOneShot(clip);
以上です。
上記の方法では、任意の効果音を重ねて鳴らすことも可能です。
同時に爆発が起こったときも最初の音が止まらずにちゃんと再生できます。
今回の場合、AudioSourceはSingletonになるため、以下のような管理クラスから効果音再生できるようにしても良いでしょう。
using UnityEngine; using System.Collections; using System.Collections.Generic; public class SoundManager : MonoBehaviour { private static SoundManager instance; private AudioSource audioSource; // Use this for initialization void Awake () { instance = this; audioSource = GetComponent<AudioSource>(); } // Update is called once per frame void Update () { } // Singletonインスタンスを取得する public static SoundManager GetInstance() { return instance; } // 指定されたクリップを再生する public void PlayClip(AudioClip clip) { audioSource.PlayOneShot(clip); } // 指定されたクリップを再生する public static void Play(AudioClip clip) { GetInstance().PlayClip(clip); } }
3Dサウンドの場合、この方法では1箇所だけから音が鳴るようになってしまうため、AudioSourceを持った効果音再生用のゲームオブジェクトを生成してここから鳴らすようにするなど工夫が必要です。