はじめに
JunShimuraさんの「[超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で ::(1)ステージ配置~(6)ブロックを手作業で並べる)」をよりゲームらしく改造する。
作成する記事は下記の通りです。
- スコアの表示
- ゲームマネージャークラスを作る
- ブロックをスクリプトで配置
- 音を鳴らす(この記事)
- 索引とまとめ
音を鳴らす準備
ゲームの演出として、BGMや効果音があるとより楽しめる。
Unityのサイトに昔からあるチュートリアル「はじめてのUnity 第3回 演出を強化しよう」(旧:Javascript) 」には「音の追加」がある。
今回はこの記事を参考にした。
【2021/02/27追記】
公式のチュートリアルのサイトが消えてしまっていたので、インターネットアーカイブでサイトを見つけました。
https://web.archive.org/web/20171002110307/http://tutorial.unity3d.jp/archive/my-first-unity/03.html
音をインポート
今回使用する音をインポートします。
まず下記サイトからサウンドファイル、sound.unitypackageファイル(4.5Mbyte)を取得します。
http://tutorial.unity3d.jp/archive/my-first-unity/project/sound.unitypackage
【2021/02/27追記】
公式のチュートリアルのサイトが消えましたが、インターネットアーカイブからダウンロードできました。
https://web.archive.org/web/20171002110307/http://tutorial.unity3d.jp/archive/my-first-unity/project/sound.unitypackage
ダウンロードしたファイルをダブルクリックしてください。下記ダイアログ画面が表示されます。

Importボタンをクリックするとインポートが始まり、Assetsに Sound フォルダ及び以下のファイルが追加されます。

- BGM
- Damage
- Death
- Spawn
- Touch
これで Unity からサウンドを使用出来る形になりました。
どんな音かは、[Inspector]タブの下に再生ボタンがあるので確認してみましょう。

接触時の音に再生するスクリプトの作成
「物が当たった時に音を再生する機能」を作成します。
HierarchyにてShiftまたはCtrlを押しながら上(TopWall)と左(LeftWall)と右(RightWall)の外壁を選択します。

[Inspector]タブで複数選択されている場合、名前は「-」になります。
[Inspector]タブの一番下にある[Add Compornent]ボタンをクリックして、Scriptアセットを作成、追加します。ファイル形式はcsを選びます。

ファイル名をHitPlaySoundとします。そうすると、Assetsの中に「HitPlaySound.cs」が出来ます。
※HとPとSは英大文字です。間違えた場合、ファイル名と中身のクラス名の両方を修正してください。

HitPlaySound.csを編集する
Assets内のHitPlaySoundスクリプト(C#のアイコン)をダブルクリックすると、エディタが開きます。
優先的に開かれるエディタは、多くの場合はMonoDevelopというソフトが起動されます。
※MonoDevelopでペーストが効かないに時はMonoDevelopを閉じ直してください。
using UnityEngine;
public class HitPlaySound : MonoBehaviour {
public AudioClip sound;
void OnCollisionEnter(Collision collision) {
AudioSource.PlayClipAtPoint(sound, transform.position);
}
}
音を登録する
壁にボールが当たった音(Touch)
先程と同様にHierarchyにてShiftまたはCtrlを押しながら上(TopWall)と左(LeftWall)と右(RightWall)の外壁を選択します。
[Inspector]タブで複数選択されている場合、名前は「-」になります。
Soundのところにある○をクリックし、開いたリスト画面からTouchを選択します。

この段階で実行してみて下さい。壁にボールが当たった際に音が再生されます。
壊れるブロックの音(Damage)
[Assets]タブにあるBlockを選択して、Inspectorを表示します。ちなみにプレハブ化された場合、水色の箱アイコンになります。
[Inspector]タブの一番下にある[Add Compornent]ボタンをクリックして、[Scripts]>[Hit Play Sound]を選択します。

Soundのところにある○をクリックし、開いたリスト画面からDamageを選択します。

この段階で実行してみて下さい。ブロックにボールが当たった際に音が再生されます。
ラケットに当たる音(Spawn)
Racketの[Inspector]タブの一番下にある[Add Compornent]ボタンをクリックして、[Scripts]>[Hit Play Sound]を選択します。
次にSoundのところにある○をクリックし、開いたリスト画面からSpawnを選択します。

この段階で実行してみて下さい。ラケットにボールが当たった際に音が再生されます。
一番下の壁に当たる音(Death)
BottomWallの[Inspector]タブの一番下にある[Add Compornent]ボタンをクリックして、[Scripts]>[Hit Play Sound]を選択します。
次にSoundのところにある○をクリックし、開いたリスト画面からDeathを選択します。

この段階で実行してみて下さい。一番下の壁にボールが当たった際に音が再生されます。
BGMを追加
HierarchyのMain Cameraを選択します。
Main Cameraの[Inspector]タブの一番下にある[Add Compornent]ボタンをクリックして、[Audio]>[Audio Source]を選択します。

次にAudio SourceコンポーネントのAudio Clipのところにある○をクリックし、開いたリスト画面からBGMを選択します。
Loopにチェックを付けます。好みですがVolumeを小さめに0.1にしました。

実装を確認する
BGMと各種の効果音が付いてグっとゲームらしくなります。
プレイ動画といってもgifアニメーションなので音が鳴りませんけどね。

学んだこと
- 他スクリプトの修正が不要で音を鳴らすことができること
- BGMは
Main Cameraに付くこと
フリーの音
- クリックするだけで効果音を自動生成する「bfxr」 要Flash
- アニメ風の効果音が収録された無料サンプルパック『464 free cartoon caper samples』
- フリーで使えるイケてる音ネタ・効果音サイトまとめ