この記事では、効果音(サウンドエフェクト)の鳴らし方について解説します。音を鳴らすには、AudioListner、AudioSource、AudioClip という3つのコンポーネントが必要です。まずは、これらの役割について理解しましょう。
目次
【知識編】音を鳴らすために必要なコンポーネント
イメージ図
AudioListner、AudioSource、AudioClip は、スピーカー、CD プレイヤー、CD のようなもと思って大丈夫です。スピーカーと CD プレイヤーがあれば、後はどんな CD を鳴らすか決めるだけですね。
AudioListner
スピーカーのような働きをします。
デフォルトで、常にメインカメラに追加されています。
各シーンで適切に機能するAudio Listenerは 1 つだけです。シーンの中に複数の AudioListner を置いてはいけません。
基本的に気にする必要はありません。
AudioSource
CD プレイヤーのような働きをします。
ボリューム(音量)やピッチ(音の高さ)、立体音響など、細かい設定が可能です。
当教室では、1つの AudioClip に1つの AudioSource を付けることを推奨しています。
AudioClipとAudioSourceが1対1だと、Unity 側の UI で簡単に変更できるためです。音量等の変更はスクリプトからも変更できますが大変な作業になります(1つのAudioSourceに複数のAudioClipの場合)。
AudioClip
AudioClip は CD のようなものです。Unity で扱える音の形式は、aif、.wav、.mp3、.ogg です。
音源を選択すると、インスペクタービューの一番下に「再生ボタン」が表示されます。
これをクリックすると、Unity 上で音を聞くことができます。
【基礎編】効果音の探し方
無料の効果音でおススメなのは以下の2つです。
効果音以外にもいろいろな素材があります。
クレジット表記が不要なので気軽に利用できます。効果音の数も豊富です。
【基礎編】プレイヤーの入力や状態に合わせて効果音を鳴らす
下記の動画のように、ジャンプしたときと着地したときに効果音をつけてみます。
効果音は好きなものを選んで OK です。私は、Asset Store 内の「FREE Casual Game SFX Pack」を利用しました。7番目を「ジャンプ」、22番目を「着地」、46番目を「攻撃」、の効果音として鳴らします。
効果音をつけたいゲームオブジェクト(下図では、「HeroKnight」)を選択し、「コンポーネントを追加」をクリックします。「Audio」⇒「Audio Source」を選択します(下図の赤線)。つけたい効果音を選択し、「Audio Source」内の「オーディオクリップ」にアタッチ(ドラッグアンドドロップ)します(下図の青線)。
スクリプト(例:HeroKnight.cs)に以下のコードを追記します。
[SerializeField] private AudioSource seJump;
[SerializeField] private AudioSource seLanding;
・・・
private void Update()
{
・・・
//Check if character just landed on the ground
if (!m_grounded && m_groundSensor.State())
{
m_grounded = true;
m_animator.SetBool("Grounded", m_grounded);
seLanding.Play();
}
//Jump
else if (Input.GetKeyDown("space") && m_grounded && !m_rolling)
{
m_animator.SetTrigger("Jump");
m_grounded = false;
m_animator.SetBool("Grounded", m_grounded);
m_body2d.velocity = new Vector2(m_body2d.velocity.x, m_jumpForce);
m_groundSensor.Disable(0.2f);
seJump.Play();
}
・・・
}
・・・
1、2行目:
効果音の数だけ用意します。今回は、ジャンプのときと、着地のときの2つが必要です。変数名は分かりやすいものにしましょう。
16 行目:
着地のときに効果音を鳴らします。
28 行目:
ジャンプするときに効果音を鳴らします。
インスペクタービューのスクリプトに、AudioSource をアタッチできる領域が表示されていると思います(赤枠)。
コンポーネント「AudioSource」を、スクリプトの変数にアタッチします(赤の矢印)。
seJump と seLanding の両方に、それぞれ「AudioSource」をアタッチします。
以上の設定で、ジャンプするときと着地したときに効果音が鳴るようになったと思います。
【応用編】アニメーション中の特定のタイミングで効果音を鳴らす
下記のように、アニメーションに合わせて効果音を鳴らしたいときがあると思います。ここでは、アニメーションイベントを使って実現する方法を説明します。
スクリプト(例:HeroKnight.cs)に以下のコードを追記します。
[SerializeField] private AudioSource seAttack1;
private void Attack1SE()
{
seAttack1.Play();
}
1 行目:
攻撃の時に鳴らす AudioSource を用意します。
3 行目:
メソッドを定義します。プログラムの中(5行目)は、AudioSource を再生するようにします。
ゲームオブジェクトに、コンポーネント「Audio Source」を追加します(下記の赤線)。次に、効果音を「オーディオクリップ」にアタッチします(青線)。最後に、スクリプトの「seAttack1」に、「Audio Source」をアタッチします(緑の線)。
アニメーションイベントを使って、剣を振る動作のとき(下図の赤枠)に効果音を鳴らすようにします。
「アニメーション」ウィンドウ上の赤枠部分を右クリックし、「アニメーションイベントを追加」します。下図のようなインスペクターが表示されるので、スクリプトに追加したメソッド(Attack1SE)を選択します。
下図のように表示されればアニメーションイベントの登録は成功です。
ゲームを再生してみてください。剣を振る瞬間に音が出るようになりましたか?
以上で、効果音をつける方法についての解説を終わります。