サウンドの基本を理解して再生や停止をしてみよう
概要
最終更新日:2020/03/03 Unityでサウンドを鳴らすための基本的な説明を書いた記事です。 主に次の項目に該当する方に向けて書いています。
- Unityでサウンドを鳴らしたい
- サウンドに必要なコンポーネントやデータを知りたい
- 再生方法と停止方法が知りたい
コンポーネント二種とデータ一種
Unityでサウンドを再生する際は以下のサウンド用コンポーネント二種とサウンドデータ一種を使用します。
- AudioSource:コンポーネント
- AudioListener:コンポーネント
- AudioClip:データ
AudioSourceとAudioListenerがコンポーネント、AudioClipがサウンドデータです。 AudioSourceは音を再生することができるので、このコンポーネントに鳴らしたいAudioClipを設定して再生します。 再生された音はAudioListenerを通して自分たちのPCに出力されます。 各内容については以下で解説しますが、以下の役割を担っていると考えれば分かりやすいと思います。
- AudioClip => 音源
- AudioSource => プレイヤー
- AudioListener => スピーカー
AudioClip
AudioClipはUnityにおけるサウンドデータの名称です。 サウンドファイルをUnityにインポートするとAudioClip形式に変換されます。 「wav」「ogg」「mp3」が使用できるサウンドファイル形式です。
AudioSource
AudioSourceはコンポーネントの一種でAudioClipを再生する機能を持っています。 このコンポーネントの機能にはAudioClipの再生の他に Loop設定やボリュームの調整、Pitchの変更など様々な機能があります。 以下はパラメータの一例です。
パラメータ名 | 説明 |
---|---|
AudioClip | 再生するAudioClipを設定する |
Loop | ループ再生の有無 チェック有り => ループ有 チェック無し => ループ無 |
PlayOnAwake | 起動時再生の有無 チェック有り => オブジェクト起動時に再生 チェック無し => 命令があるまで再生しない |
Volume | 音のボリューム設定 最大音量は1.0でそれ以上にならないので注意 |
AudioListener
AudioListenerはAudioSourceで再生されている音を 外部に出力するためのコンポーネントです。 このコンポーネントを設定されているGameObjectが存在しないと AudioSourceで再生していたとしても音は出力されません。 ※MainCameraにデフォルトで設定されています。
AudioListenerの数
AudioListenerは複数設定することは推奨されておらず 設定している場合、以下のような警告がでます。 できるだけ動作しているAudioListenerは一つになるにしてください。
再生方法
サウンドの再生方法は二つあります。
- PlayOnAwakeによる再生
- スクリプトによる再生
PlayOnAwakeによる再生
PlayOnAwakeによる再生はものすごく簡単です。 AudioSourceのInspcetorのPlayOnAwakeのチェックボックスに チェックを入れるだけで再生します。
スクリプトによる再生
PlayOnAwakeにチェックを入れていない場合の再生はスクリプト上で 以下の二つのどちらかのメソッドを実行して行います。 この二つのはどちらも再生メソッドではありますが、用途はわかれています。
- Play BGM再生用
- PlayOneShot SE再生用
Play
「Playメソッド」はAudioSourceのメソッドでメンバ変数である
clipに設定されているAudioClipを再生するメソッドです。
AudioSource audio = GetComponent<AudioSource>();
audio.Play();
Playの説明でも書いていますが、このメソッドでは再生できる音は一つだけです。
再度Playを実行しても再生中の音の上から新しい音を上書きするので
音を重ねることができません。
このことからPlayは音を重ねることがないBGMに向いているとされています。
PlayOneShot
「PlayOneShotメソッド」は引数でAudioClipを指定することで、音を再生します。
AudioSource audio = GetComponent<AudioSource>();
// Clipはメンバ変数としてAudioClipを別の場所で値を代入済みとする
audio.Play(Clip, 1.0f);
PlayOneShotは再生中の音に合成という形で新しいを重ねることができます。
その結果、連続で再生したり、様々な音がまじりあるSEに向いているとされています。
停止方法
音を停止させるにはAudioSourceの「Stopメソッド」を使用します。
AudioSource source = gameObject.GetComponent<AudioSource>();
source.Stop();
このメソッドを使用した場合、停止の対象はAudioSourceで
再生されている全ての音が対象となります。
つまり、PlayとPlayOneShotで再生されている音が全て停止します。
もし、BGMは再生し続けたいけど、SEは停止させたいといったような
音毎に再生と停止を使い分けたいケースがあるなら、
AudioSourceを複数用意してください。
今回の例ならBGM用とSE用にAudioSourceを用意するということです。
また、停止された音を再度再生しても最初から再生になるので
そこも気を付けてください。
一時停止
「Pauseメソッド」と「UnPauseメソッド」を使用すれば再生中の音を
一時停止させて、その後停止個所から再生することもできます。
if (Input.GetKeyDown(KeyCode.Return))
{
// 一時停止
Source.Pause();
}
else if(Input.GetKeyDown(KeyCode.Space))
{
// 再開
Source.UnPause();
}
こちらもStopと同様にPause、UnPauseを実行したら、
対象のAudioSourceで再生中の全ての音が停止してしまうので注意してください。
以上がサウンドの基本的な説明になります。 練習としてBGMを鳴らしながらキーボードを押した時にSEがならしてみてください。