この記事では、UnityでBGMやSEなどの音を鳴らす方法を解説します。
BGMを流すことで場の緊張感や楽しげな雰囲気を醸し出すことができ、SEを鳴らすことで爽快感やリアリティさを演出することができます。
まずはゲーム内で音を鳴らすのに必要なコンポーネントやデータを確認していきましょう。
Unity で使用するオーディオファイルは「AudioClip(オーディオクリップ)」と呼ばれています。このデータを次に紹介する AudioSourceコンポーネントに渡してサウンドを再生します。
LinkAudioClip - Unity スクリプトリファレンス
アセットストアやフリーサイトなどでダウンロードして音源を用意しましょう!
※ インポートできるオーディオファイル形式は「.aif、.wav、.mp3、.ogg」です。
音を鳴らすには AudioSourceコンポーネントを使います。
LinkAudioSource - Unity スクリプトリファレンス
音を鳴らしたいオブジェクトに AudioSourceコンポーネントをアタッチし、ゲーム開始時に再生させたり、スクリプトから再生することができます。
BGM、 SEのどちらも AudioSourcコンポーネントを用いて再生します。
AudioSourceコンポーネントで音を再生しただけではプレイヤーはその音を聞くことができません。プレイヤーの耳である AudioListenerコンポーネントが必要となります。
LinkAudioListener - Unity スクリプトリファレンス
AudioListenerコンポーネントはデフォルトでメインカメラにアタッチされています。
それでは、実際に音を鳴らしてみましょう!
まずは適当なプロジェクトを作成し、その中に空オブジェクトを作成してください。作成したらそのオブジェクトに AudioSourceコンポーネントをアタッチします。
次に、AudioSourceコンポーネントのインスペクター上でオーディオクリップを設定します。ちなみに、今回はアセットストアにある「8Bit Music - 062022」を使わしてもらいました。
そしたら、「PlayOnAwake(ゲーム開始時に再生)」にチェックが入っているか確認し、ゲームを再生してみてください。
これで渡したオーディオクリップが再生されました。
BGMを再生する場合は、「Loop(ループ)」にチェックをし、「SpatialBlend(立体音響ブレンド)」を「0」にします。
Loop | ループ再生するかどうか |
---|---|
SpatialBlend | 3D立体化の計算(減衰やドップラーなど)によってどのくらい影響を受けるか設定します。 「0.0」は音を完全に「2D」にし、「1.0」は完全に「3D」になる |
BGMをループ再生し、位置関係によってボリュームが変わらないように設定できます。
スクリプトからBGMを再生するには、AudioSource
のPlay()
を呼び出します。
using UnityEngine;
public class Sound : MonoBehaviour
{
private AudioSource audioSource;
void Start()
{
// AudioSource コンポーネントの取得
audioSource = GetComponent<AudioSource>();
// 再生
audioSource.Play();
}
}
LinkAudioSource-Play - Unity スクリプトリファレンス
途中で曲を変更したい場合は、AudioSource
のClip
を変更してから再生するだけです。
using UnityEngine;
public class Sound : MonoBehaviour
{
private AudioSource audioSource;
// 複数のBGMを受け取っておく
[SerializeField]
private AudioClip[] clips;
void Start()
{
// AudioSource コンポーネントの取得
audioSource = GetComponent<AudioSource>();
// 曲の変更(clipsからランダムに選ばれる)
audioSource.clip = clips[Random.Range(0, clips.Length)];
// 再生
audioSource.Play();
}
}
LinkAudioSource-clip - Unity スクリプトリファレンス
シーンを遷移する際にオブジェクトが削除されてしまうのでBGMが途切れてしまう。つまりは削除されないようにすればBGMは途切れることがなくなります。
シーンを遷移しても削除されないようにするにはDontDestroyOnLoad()
を使います。
using UnityEngine;
public class Sound : MonoBehaviour
{
void Start()
{
// 引数に指定したオブジェクトを削除されないように設定できる
DontDestroyOnLoad(this);
}
}
SEを再生する場合は、AudioSorce の設定を以下のように変更します。
そしたら以下のようなスクリプトを作成し、アタッチしてください。
using UnityEngine;
public class Sound : MonoBehaviour
{
private AudioSource audioSource;
// SEを受け取っておく
[SerializeField]
private AudioClip se;
void Start()
{
// AudioSource コンポーネントの取得
audioSource = GetComponent<AudioSource>();
}
private void Update()
{
// 左クリックした場合
if(Input.GetMouseButtonUp(0))
{
// 引数のクリップを再生
audioSource.PlayOneShot(se);
}
}
}
後はインスペクター上で再生したSEを渡しておきます。
ゲームを実行し、左クリックを押してみてください。
SEが再生されたと思います。
ポイントはSEの再生にはPlayOneShot()
を使うことです。BGMの再生に使うPlay()
と違って重ねて再生することができます。
LinkAudioSource-PlayOneShot - Unity スクリプトリファレンス
この記事では、BGMやSEなどの音を鳴らす方法を解説しました。
サウンドがないゲームはとても寂しいものになってしまいます。なので、適切にBGMやSEを流して楽しいゲームにしちゃいましょう!
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ