Unityのオーディオの基本
UnityでBGMやSE(効果音)などの音を再生するには「Audio Clip」「Audio Source」「Audio Listener」を使用します。
Audio Clip
「Audio Clip」はmp3やoggなどの音源ファイルです。
自作、または素材サイトからダウンロードなどで用意したファイルをエディターにドラッグアンドドロップしてインポートします。
Audio Source
「Audio Source」は紐づけられたAudio Clipを再生します。
Audio Sourceコンポーネントをオブジェクトにアタッチして使用します。
Audio Listener
「Audio Listener」はマイクのようなもので、Audio Listenerが拾った音が実際のゲームの音として流れます。
初期状態ではメインカメラにアタッチされており、プロパティはありません。
基本的にメインカメラかプレイヤーにアタッチして使うことになると思います。
Audio Listenerは1シーンにつき1つだけで、複数ある場合は警告が表示されます。
実装例
シーン再生時に音を再生する
オブジェクトにAudio Sourceをアタッチし、再生したい音のファイルをAudio Clipに指定します。
「Play On Awake」をONにすると、シーンが実行された瞬間に音が流れるようになります。
また、「Loop」をONにすると音楽が自動でループ再生されるようになります。
スクリプトから音を再生する
スクリプトから再生する場合は、「AudioSource.Play」か「AudioSource.PlayOneShot」を使用します。
AudioSource.Play
AudioSource.Playは複数の音を重ねて再生できないため、主にBGMの再生で使用します。
以下はサンプルスクリプトです。
using UnityEngine;
public class AudioTest : MonoBehaviour
{
AudioSource source;
void Start()
{
source = GetComponent<AudioSource>();
source.Play();
}
}
オブジェクトにAudio Sourceとスクリプトをアタッチし、「Play On Awake」をOFFにして実行すると、Audio Clipに指定した音が再生されます。
AudioSource.PlayOneShot
AudioSource.PlayOneShotは複数の音を重ねて再生できるため、主にSEの再生で使用します。
ただし、PlayOneShotの場合はスクリプトでAudio Clipを指定する必要があります。
以下はサンプルスクリプトです。
using UnityEngine;
public class AudioTest : MonoBehaviour
{
public AudioClip clip;
AudioSource source;
void Start()
{
source = GetComponent<AudioSource>();
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
// マウスクリックで再生
source.PlayOneShot(clip);
}
}
}
オブジェクトにAudio Sourceとスクリプトをアタッチし、clipに再生したいAudio Clipを指定して実行すると、マウスの左クリックで音が再生されます。
連続でクリックしても前の音が途中で消されることなく最後まで再生されます。
音の再生を停止する
再生中の音を停止するには「AudioSource.Stop」を使用します。
以下はサンプルスクリプトです。
using UnityEngine;
public class AudioTest : MonoBehaviour
{
AudioSource source;
void Start()
{
source = GetComponent<AudioSource>();
source.Play();
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
// マウスクリックでBGMを停止
source.Stop();
}
}
}
オブジェクトにAudio Sourceとスクリプトをアタッチして実行し音楽が再生された後、マウスを左クリックすると音楽が停止されます。
音の再生を一時停止・一時停止を解除する
一時停止は「AudioSource.Pause」、一時停止の解除は「AudioSource.UnPause」を使用します。
以下はサンプルスクリプトです。
using UnityEngine;
public class AudioTest : MonoBehaviour
{
AudioSource source;
bool pause = false;
void Start()
{
source = GetComponent<AudioSource>();
source.Play();
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
if (pause)
{
// 一時停止解除
source.UnPause();
pause = false;
}
else
{
// 一時停止
source.Pause();
pause = true;
}
}
}
}
オブジェクトにAudio Sourceとスクリプトをアタッチして実行し音楽が再生された後、マウスを左クリックすると一時停止、もう一度クリックすると一時停止が解除されます。
「一時停止」なので、音楽は続きから再生されます。
さいごに
「音」はゲームを作るうえで非常に重要な要素です。
ゲームがある程度出来てからの実装が多いと思いますが、音が入ると一気に没入感が高くなるので、基本的な使い方をしっかり押さえておきたいです。
コメント