はじめに
この記事ではUnityでBGMやSEを鳴らす方法を紹介します。
準備
1、音源ファイルの準備
Asset内に適当なフォルダを作成し、
音源ファイル(mp3かwav)を入れてください。
音源をクリックして開き、
Inspectorから設定を変更していきます。
Force To Mono
チェックを入れるとモノラルになります。
これだけでファイルサイズが半分くらいになります。
Inspectorの下の方にある、
Original Size(元のファイルサイズ)と
Imported Size(変更後のファイルサイズ)で
見比べてみてください。
サウンドエフェクト(SE)など、
音質が低くても問題ないものは
どんどんモノラルにしましょう。
Load Type
初期では「Compressd In Memory」になってますが、
これはメモリを使用するので、
基本的には「Decompress On Load」を使用し、
BGMのみ「Streaming」をおすすめします。
・Decompress On Load
シーンを読み込んだ時、
圧縮されているファイルを展開してメモリにロードします。
他の2つは再生時に展開処理をするのに対し、
これはすでに展開してあるので、CPUへの負荷が低いです。
ただし、ファイルサイズが大きすぎると、
メモリーを大量に使用するので、
そのときは以下2つを使用してください。
・Compressd In Memory
サウンドファイルはメモリ内で圧縮されたままです。
再生時に展開するのでCPUへの負荷が高いです。
・Streaming
ファイルをロードしながら再生するので、
使用するメモリが少ないです。
ただし、CPUへの負荷はあります。
BGMなどのサイズが大きいものに適しています。
最後に、Applyをクリックして保存してください。
2、AudioSourceの設置
Hierarchy上に右クリックで「Create Empty」で
空オブジェクトを作成し、
Inspectorで「Add Component」をクリック。
「Audio Source」で検索して、
このコンポ―ネントを2つ設置してください。
もちろん、使用する音源の数に合わせて変更してください。
Audio Clip欄に音源ファイルをドラッグ&ドロップしてください。
ゲームを実行すると音がなります。
Audio Sourceの設定は以下を参考にして行ってください。
・Play On Awake
ゲーム実行時に音源を再生するかどうか。
・Loop
音源をループ再生するかどうか。
・Volume
音量調整。0 ~ 1。
ここで注意点ですが、Audioを鳴らすには、
AudioListenerを設置する必要があります。
通常はMain Cameraにアタッチされています。
1つのシーンに1つAudioListernerが必ず必要です。
アタッチするオブジェクトは何でも構いません。
スクリプトから音源再生(重複なし)「Play()」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { AudioSource[] sounds; // Use this for initialization void Start() { sounds = GetComponents<AudioSource>(); } // Update is called once per frame void Update() { //キーボードの1か2を押したら音楽再生 if (Input.GetKeyDown(KeyCode.Alpha1)) { sounds[0].Play(); } if (Input.GetKeyDown(KeyCode.Alpha2)) { sounds[1].Play(); } } } |
適当なスクリプトを作成し、
AudioSourceをアタッチしているオブジェクトに
アタッチしてください。
1 |
AudioSource[] sounds; |
今回は複数のAudioSourceを取得したいので、
配列で変数を宣言してください。
1 |
sounds = GetComponents<AudioSource>(); |
ここでポイントです!
配列を使ってコンポ―ネントを取得するときは、
GetComponentsと記入してください。
1 |
if (Input.GetKeyDown(KeyCode.Alpha1)) |
今回はキーボードの1か2を押したら
音声が流れます。
ゲーム実行時に音を流したくないので、
AudioSourceのPlay On Awake のチェックは外してください。
これで実行して1か2を押すと、音声が鳴ります。
スクリプトから音源再生(重複あり)「PlayOneShot()」
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test : MonoBehaviour { AudioSource[] sounds; public AudioClip[] clips = new AudioClip[2]; // Use this for initialization void Start() { sounds = GetComponents<AudioSource>(); } // Update is called once per frame void Update() { //音源の重複無しで再生 if (Input.GetKeyDown(KeyCode.Alpha1)) { sounds[0].Play(); } if (Input.GetKeyDown(KeyCode.Alpha2)) { sounds[1].Play(); } //音源の重複ありで再生 if (Input.GetKeyDown(KeyCode.Alpha3)) { sounds[0].PlayOneShot(clips[0]); } if (Input.GetKeyDown(KeyCode.Alpha4)) { //soundsは[0]でも[1]でもどちらも可。 sounds[0].PlayOneShot(clips[1]); } } } |
コインをたくさん獲得したときのように、
チャリンチャリンという音を重ねて流したいときは、
1 |
AudioSource.PlayOneShot(AudioClip); |
のように使用します。
まず、AudioClipの配列をpublicで宣言してください。
1 |
public AudioClip[] clips = new AudioClip[2]; |
これで、InspectorにAudioClipの欄が現れるので、
そこに音源をドラッグ&ドロップしてください。
次に
1 |
sounds[0].PlayOneShot(clips[0]); |
のように使用してください。
AudioSourceの方は[0]でも[1]でも構いません。
どれでも同じです。
clip[0]がInspector上のelement[0]に対応しています。
これでゲームを実行し、キーボードの3か4を押すと音が鳴ります。
短い音源だと分かりにくいので、
BGM等の長い音源を何度も鳴らしてみてください。
Play()では実行するたびに初めから音が鳴っていましたが、
今回は音が重なって騒がしくなっていると思います。
場合によっては大きい音になるので注意してください。