サウンドの基本を理解して再生や停止をしてみよう

概要

最終更新日: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」が使用できるサウンドファイル形式です。

unity_0180

AudioSource

AudioSourceはコンポーネントの一種でAudioClipを再生する機能を持っています。
このコンポーネントの機能にはAudioClipの再生の他に
Loop設定やボリュームの調整、Pitchの変更など様々な機能があります。

unity_0181

以下はパラメータの一例です。

パラメータ名 説明
AudioClip 再生するAudioClipを設定する
Loop ループ再生の有無
チェック有り => ループ有
チェック無し => ループ無
PlayOnAwake 起動時再生の有無
チェック有り => オブジェクト起動時に再生
チェック無し => 命令があるまで再生しない
Volume 音のボリューム設定
最大音量は1.0でそれ以上にならないので注意

AudioListener

AudioListenerはAudioSourceで再生されている音を
外部に出力するためのコンポーネントです。
このコンポーネントを設定されているGameObjectが存在しないと
AudioSourceで再生していたとしても音は出力されません。
※MainCameraにデフォルトで設定されています。

unity_0182

AudioListenerの数

AudioListenerは複数設定することは推奨されておらず
設定している場合、以下のような警告がでます。

unity_0183
できるだけ動作しているAudioListenerは一つになるにしてください。

再生方法

サウンドの再生方法は二つあります。
  • PlayOnAwakeによる再生
  • スクリプトによる再生

PlayOnAwakeによる再生

PlayOnAwakeによる再生はものすごく簡単です。
AudioSourceのInspcetorのPlayOnAwakeのチェックボックスに
チェックを入れるだけで再生します。

unity_0102

スクリプトによる再生

PlayOnAwakeにチェックを入れていない場合の再生はスクリプト上で
以下の二つのどちらかのメソッドを実行して行います。
この二つのはどちらも再生メソッドではありますが、用途はわかれています。
  • Play
  • BGM再生用
  • PlayOneShot
  • SE再生用

Play

Playメソッド」はAudioSourceのメソッドでメンバ変数である
clipに設定されているAudioClipを再生するメソッドです。

unity_0097
AudioSource audio = GetComponent<AudioSource>();
audio.Play();

Playの説明でも書いていますが、このメソッドでは再生できる音は一つだけです。
再度Playを実行しても再生中の音の上から新しい音を上書きするので
音を重ねることができません。
このことからPlayは音を重ねることがないBGMに向いているとされています。

PlayOneShot

「PlayOneShotメソッド」は引数でAudioClipを指定することで、音を再生します。

unity_0098
AudioSource audio = GetComponent<AudioSource>();

// Clipはメンバ変数としてAudioClipを別の場所で値を代入済みとする
audio.Play(Clip, 1.0f);

PlayOneShotは再生中の音に合成という形で新しいを重ねることができます。
その結果、連続で再生したり、様々な音がまじりあるSEに向いているとされています。

停止方法

音を停止させるにはAudioSourceの「Stopメソッド」を使用します。

unity_0099
AudioSource source = gameObject.GetComponent<AudioSource>();

source.Stop();

このメソッドを使用した場合、停止の対象はAudioSourceで
再生されている全ての音が対象となります。
つまり、PlayとPlayOneShotで再生されている音が全て停止します。
もし、BGMは再生し続けたいけど、SEは停止させたいといったような
音毎に再生と停止を使い分けたいケースがあるなら、
AudioSourceを複数用意してください。
今回の例ならBGM用とSE用にAudioSourceを用意するということです。

また、停止された音を再度再生しても最初から再生になるので
そこも気を付けてください。

一時停止

Pauseメソッド」と「UnPauseメソッド」を使用すれば再生中の音を
一時停止させて、その後停止個所から再生することもできます。

unity_0100

unity_0101

if (Input.GetKeyDown(KeyCode.Return))
{
	// 一時停止
	Source.Pause();
}
else if(Input.GetKeyDown(KeyCode.Space))
{
	// 再開
	Source.UnPause();
}

こちらもStopと同様にPause、UnPauseを実行したら、
対象のAudioSourceで再生中の全ての音が停止してしまうので注意してください。
以上がサウンドの基本的な説明になります。
練習としてBGMを鳴らしながらキーボードを押した時にSEがならしてみてください。