Unityで複数の効果音を鳴らす方法について紹介します。
効果音の数だけ、AudioSourceコンポーネントをゲームオブジェクトにアタッチする方法が便利です。
この方法にすれば、音量等をそれぞれ異なる値に設定したい時に、インスペクターから各AudioSourceコンポーネントのプロパティを直接調整することが出来ます。
まず音源を用意します。フリー素材サイトの音人さん等からダウンロードしましょう。
Unityでは、mp3,wav,oggなどのファイルが使えます。
ここでは、ItemGet.wavというファイルと、Bakuhatu.mp3というファイルを使います。
UnityのプロジェクトウィンドウのAssetsフォルダ内にエクスプローラーやFinderからドラッグ&ドロップして音源ファイルを取り込みます。
(必要に応じて、Soundsなどのフォルダを作成し、そこに移動してファイルを整理しましょう)
音を鳴らしたいゲームオブジェクトにAudioSourceコンポーネントを2つ追加しましょう。
そして、「ゲーム開始時に再生」のチェックを外しておきましょう。
AudioSourceコンポーネントのAudioClipのプロパティに音源ファルをドラッグ&ドロップして設定します。
以下のスクリプトを書きます。クラス名は作成したスクリプトのファイル名になります。
上キーと下キーを押した時に、それぞれ異なった音を鳴らすスクリプトです。
そして、適当なゲームオブジェクトにアタッチしてください。
★[SerializeField]について★
[SerializeField]を使うと、インスペクターから値を変えられるようになります。
publicでもインスペクターから値を変えられますが、publicとの違いは、他のスクリプトから対象のフィールドを操作できるかどうか、という点です。
publicなら他のスクリプトから直接値を変更できますが、[SerializeField]の場合はprivateなフィールドのままなので、他のスクリプトから値を変更できません。
他のスクリプトから操作する必要が無い場合は、[SerializeField]を使いましょう。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SoundManager : MonoBehaviour
{
[SerializeField] AudioSource asBakuhatu;
[SerializeField] AudioSource asItemGet;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow))//もし上キーが押されたら
{
asBakuhatu.Play();
}
if (Input.GetKeyDown(KeyCode.DownArrow)) //もし下キーが押されたら
{
asItemGet.Play();
}
}
}
[SerializeField]で宣言した変数に、インスペクターからAudioSourceコンポーネント2つをドラッグ&ドロップして設定します。
×AudioClip(オーディオクリップ)ではなく、◯AudioSourceコンポーネントです。間違えないように注意してください。
実行して、上下キーを押した動作確認しましょう。