Unity 効果音が再生されていないときに効果音を再生したい時の対処方法

皆さんこんにちは!

 

Unityでゲームを作る時って、BGMやSEをなるべく入れてますよね!

 

BGMは基本的に一種類しか流さないのでいいと思うのですが、
SEは鳴らすタイミングが様々で少し扱いが難しいですよね・・。

 

そこで今回はSEのタイミング制御方法として
音が鳴っていない場合に、新たに音を再生する方法について紹介していきます!

Unityで効果音の鳴らし方

Unity 基本的な音の鳴らし方

Unityで音を鳴らすのであれば、比較的簡単に実装することができます。

  1. ゲームオブジェクトにAudioSourceコンポーネントをアタッチ
  2. AudioClipに鳴らしたい音を設定
  3. 音を再生する関数を作成し、任意のタイミングで呼び出す※

※コードは下記の通りです

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
private AudioSource audioSource;
private void Awake()
{
audioSource = GetComponent<AudioSource>();
}
private void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
PlaySE();
}
}
public void PlaySE()
{
audioSource.Play();
}
}
view raw Test.cs hosted with ❤ by GitHub

 

このコードではスペースキーを押すたびに
SEが鳴るようになっています。

しかしスペースキーが連打された場合、
何度も音を再生してしまうことになります。

Unity 音が鳴っていないときに、新たな音を出す

それを防ぐことができるのが今回紹介する
isPlayingというものです。

下記コードをご覧ください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour
{
private AudioSource audioSource;
private void Awake()
{
audioSource = GetComponent<AudioSource>();
}
private void Update()
{
if(Input.GetKeyDown(KeyCode.Space) && !audioSource.isPlaying)
{
PlaySE();
}
}
public void PlaySE()
{
audioSource.Play();
}
}
view raw Test2.cs hosted with ❤ by GitHub

このようにAudioSourceが、
現状再生されているかどうかの判定を行い
bool値の戻り値を返してくれます。

再生中であればtrue
ちがければfalse

が帰ってきます。

 

音が鳴り終わったら、
行いたい処理などある場合、
非常に有効に使えます。