初めに
オーディオの基本について、まとめます。BGM や SE など音を再生する仕組みや再生の仕方を載せています。
Index
音を再生する仕組み
Unity 上で音を再生するには、次の3つが必要になります。
- Audio Source:Audio Clip を再生するためのもの
- Audio Clip:BGM や SE などの音そのもの
- Audio Listener:再生された音を聞き取れるようにするもの
Audio Clip(音) を Audio Source で再生し、Audio Listener でコンピュータのスピーカーを通じて聞きとれるようにします。
Audio Source
コンポーネントについての説明は、ある程度リンク先にまかせます。リンク先で分かりにくい部分や重要な部分を書いておきます。
Audio Clip | Audio Clip(音)を設定します |
---|---|
Output | デフォルト(None)の場合は、シーンの Audio Listener から音が出力されます。Audio Mixer Group Controller をドラッグ & ドロップし、Audio Mixer を設定することができる。 |
Play On Awake | これが有効になっていると、シーンが起動すると同時にサウンドが再生されます。無効になっている場合は、スクリプトで Play() コマンドを使用してスタートする必要があります。 |
Bypass は使用しているエフェクトを一時的に無効にすることを意味します。
Bypass Reverb Zones は Audio Reverb Zone の On/Off です。Audio Reverb Zone は Cave(洞窟)や Bathroom(お風呂)など残響の効果を設定できます。
Audio Clip
Audio Clip は音そのものです。.aif、.wav、.mp3、.ogg や、トラッカーモジュール の.xm、.mod、.it、.s3m 形式をサポートしています。
Audio Listener
Audio Source で再生されている音をスピーカーから聞きとれるようにするものです。Main Camera にデフォルトでついています。
BGM を再生する
BGM をシーン開始時に再生させます。
今回は、次のサイトから音源をお借りして使用します。
音楽:魔王魂
- Audio Source を生成する
Hierarchy で右クリック→Audio→Audio Sourceで生成できます。
- Audio Source に Audio Clip を設定する
- Play On Awake と Loop にチェックを入れる
シーン開始時に再生されるように Play On Awake にチェックを入れます。また、BGM が繰り返されるように Loop にチェックを入れます。
(実行)
AudioSource をスクリプトから扱う
AudioSource をスクリプトから操作してみましょう。
今回は先ほどの BGM をスクリプトから流してみます。それだけでは芸がないので、音量を徐々に大きくなるようにしてみます。
- スクリプトを記述する
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AudioManager : MonoBehaviour { //AudioSource取得用 AudioSource audiosource; //SoundClip取得用 public AudioClip sound1; // Start is called before the first frame update void Start() { //AudioSourceコンポーネントを取得 audiosource = this.GetComponent<AudioSource>(); //Audio Clip を sound1 に設定 audiosource.clip = sound1; //volume(音の大きさ)を設定 audiosource.volume = 0.1f; //再生 audiosource.Play(); } // Update is called once per frame void Update() { //volumeが1より小さい間はvolumeを大きくする if(audiosource.volume < 1) { audiosource.volume += 0.002f; } } }
volume は 0 ~ 1 の数値をとります。0 の場合は無音になります。
- 先ほどのスクリプトを Audio Source につける
- Audio Clip を取得する
他にも一時停止したり、ピッチを変えたりできます。AudioSource で使用できる変数、関数はリンク先をご覧ください。
SE を再生する
BGM が流れている状態で SE が鳴るようにします。先ほどの BGM を実行した状態の続きから始めます。
今回は Button が押されたときに SE がなるようにします。
- BGM 用の Audio Source のほかに、もう一つ Audio Source を生成する
SE 用の Audio Source を生成します。
- Button を生成する
今回は Button が押されたときに SE が鳴るようにするので、Button を生成しておきます。
- SE 用の Audio Source につけるスクリプトを書く
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //Buttonを使用するために追加 public class SEManager : MonoBehaviour { //Button取得用 [SerializeField]Button btn1; [SerializeField]Button btn2; [SerializeField]Button btn3; //AudioClip取得用 public AudioClip sound1; public AudioClip sound2; public AudioClip sound3; AudioSource audioSource; void Start() { //AudioSourceのComponentを取得 audioSource = GetComponent<AudioSource>(); } //ButtonごとにSEを鳴らす関数を設定 public void onClickSE1() { audioSource.PlayOneShot(sound1); } public void onClickSE2() { audioSource.PlayOneShot(sound2); } public void onClickSE3() { audioSource.PlayOneShot(sound3); } }
今回は、Button と Audio Clip を取得し、Button が押されたときに AudioSource から1回再生されるように記述しています。PlayOneShot は引数にとった Audio Clip を1回再生するものになります。似たものに Play() がありますが、今回は SE のため PlayOneShot を使いました。違いは後述します。
- 先ほどのスクリプトを SE 用の Audio Source につける
- Button、Audio Clip を取得する
- Button に関数を設定する
今回は3つの Button にそれぞれ onClickSE1、onClickSE2、onClickSE3 を設定します。
(実行)
Play と PlayOneShot の違い
スクリプトから Audio Clip を再生するには主に Play か PlayOneShot を使います。2つの違いは次の通りになります。
① Play は clip に指定してあるものを再生する。PlayOneShot は引数にあるものを再生する。
② Play は重複して再生不可能。PlayOneShot は重複して再生可能。
①はスクリプトを見るとすぐに違いが分かります。
//Playを使う場合 //clip に Audio Clip を設定 audiosource.clip = sound1; //再生 audiosource.Play(); //PlayOneShotを使う場合 audiosource.PlayOneShot(sound1);
②は実際に見ていただいたほうが分かりやすいと思います。
(Play)
(PlayOneShot)
BGM などは音が2重にならないように Play を使うほうがよいでしょう。SE は連続して再生する場合、 Play だとぶつ切りに聞こえてしまうため、PlayOneShot を使うほうがよいでしょう。
最後に
オーディオについて、Unity におけるオーディオの仕組みと簡単な使い方をまとめました。音を再生するために Audio Source、Audio Clip、Audio Listener の3つが必要なことが分かっていれば、なんとかなるのではないでしょうか。