【Unity】音を鳴らす：「はじめてのUnity」のブロック崩しを改造しながら学ぶ

# はじめに
JunShimuraさんの「[[超初心者向け]Unityチュートリアル「はじめてのUnity」のブロック崩しと同等をC#で](http://qiita.com/JunShimura/items/cbb0db8087a5cc75735e) ::(1)ステージ配置～(6)ブロックを手作業で並べる)」をよりゲームらしく改造する。

作成する記事は下記の通りです。

 * [スコアの表示](http://qiita.com/yaju/items/615b31e9f17e310642d6)
 * [ゲームマネージャークラスを作る](http://qiita.com/yaju/items/5a3b46104f4f0a767c7f)
 * [ブロックをスクリプトで配置](http://qiita.com/yaju/items/5b54016c6574bc84c41d)
 * 音を鳴らす(この記事)
 * [索引とまとめ](https://qiita.com/yaju/items/b9f6ffbc1606a451ea9b)
 
# 音を鳴らす準備
ゲームの演出として、BGMや効果音があるとより楽しめる。

Unityのサイトに昔からあるチュートリアル「[はじめてのUnity 第3回 演出を強化しよう」(旧:Javascript)](http://tutorial.unity3d.jp/archive/my-first-unity/03.html) 」には「音の追加」がある。
今回はこの記事を参考にした。

【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

ダウンロードしたファイルをダブルクリックしてください。下記ダイアログ画面が表示されます。
![Unity_SoundAdd.png](https://qiita-image-store.s3.amazonaws.com/0/14053/005732fa-1e76-e875-be78-1580e3535a62.png)

`Import`ボタンをクリックするとインポートが始まり、Assetsに Sound フォルダ及び以下のファイルが追加されます。
![Unity_SoundAssets.png](https://qiita-image-store.s3.amazonaws.com/0/14053/4f14e132-0b99-58c4-d012-04cddbda3965.png)

* BGM
* Damage
* Death
* Spawn
* Touch

これで Unity からサウンドを使用出来る形になりました。
どんな音かは、[Inspector]タブの下に再生ボタンがあるので確認してみましょう。
![Unity_SoundPlay.png](https://qiita-image-store.s3.amazonaws.com/0/14053/0208f2aa-0ce9-4544-99ee-f1d7143ea6a8.png)

## 接触時の音に再生するスクリプトの作成
「物が当たった時に音を再生する機能」を作成します。

Hierarchyにて`Shift`または`Ctrl`を押しながら上(TopWall)と左(LeftWall)と右(RightWall)の外壁を選択します。
![Unity_SelectWall.png](https://qiita-image-store.s3.amazonaws.com/0/14053/d6cfdde9-459c-a7b5-70f8-483444d1e836.png)
[Inspector]タブで複数選択されている場合、名前は「－」になります。
[Inspector]タブの一番下にある[Add Compornent]ボタンをクリックして、Scriptアセットを作成、追加します。ファイル形式はcsを選びます。
![Unity_SoundScriptAdd.gif](https://qiita-image-store.s3.amazonaws.com/0/14053/27950c5f-c0ce-3b06-fef5-052381bfdfb1.gif)

ファイル名を`HitPlaySound`とします。そうすると、Assetsの中に「HitPlaySound.cs」が出来ます。
※HとPとSは英大文字です。間違えた場合、ファイル名と中身のクラス名の両方を修正してください。
![Unity_SoundScript.png](https://qiita-image-store.s3.amazonaws.com/0/14053/8e5bd8ff-e9bd-e891-c282-7b6cdb1d897f.png)

## HitPlaySound.csを編集する
Assets内のHitPlaySoundスクリプト(C#のアイコン）をダブルクリックすると、エディタが開きます。
優先的に開かれるエディタは、多くの場合はMonoDevelopというソフトが起動されます。
※MonoDevelopでペーストが効かないに時はMonoDevelopを閉じ直してください。

``` csharp:HitPlaySound.cs
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`を選択します。
![Unity_SoundTouch.png](https://qiita-image-store.s3.amazonaws.com/0/14053/f04b6fa3-b25d-4468-90a2-bf7bf8a97dd6.png)

この段階で実行してみて下さい。壁にボールが当たった際に音が再生されます。

## 壊れるブロックの音(Damage)
[Assets]タブにあるBlockを選択して、`Inspector`を表示します。ちなみにプレハブ化された場合、水色の箱アイコンになります。
[Inspector]タブの一番下にある[Add Compornent]ボタンをクリックして、[Scripts]>[Hit Play Sound]を選択します。
![Unity_SoundBlock.gif](https://qiita-image-store.s3.amazonaws.com/0/14053/badf5b9f-c65d-d5ea-9d5f-86da5d99c433.gif)
`Sound`のところにある○をクリックし、開いたリスト画面から`Damage`を選択します。
![Unity_SoundDamage.png](https://qiita-image-store.s3.amazonaws.com/0/14053/f59ab022-add4-0a4f-4d63-65a13723a29c.png)

この段階で実行してみて下さい。ブロックにボールが当たった際に音が再生されます。

## ラケットに当たる音(Spawn)
`Racket`の[Inspector]タブの一番下にある[Add Compornent]ボタンをクリックして、[Scripts]>[Hit Play Sound]を選択します。
次に`Sound`のところにある○をクリックし、開いたリスト画面から`Spawn`を選択します。
![Unity_SoundSpawn.png](https://qiita-image-store.s3.amazonaws.com/0/14053/46bfa801-d4e8-364c-63c1-8492253b0172.png)

この段階で実行してみて下さい。ラケットにボールが当たった際に音が再生されます。

## 一番下の壁に当たる音(Death)
`BottomWall`の[Inspector]タブの一番下にある[Add Compornent]ボタンをクリックして、[Scripts]>[Hit Play Sound]を選択します。
次に`Sound`のところにある○をクリックし、開いたリスト画面から`Death`を選択します。
![Unity_SoundDeath.png](https://qiita-image-store.s3.amazonaws.com/0/14053/6c864ea6-1fb5-d2a5-e974-2f39c2dbb6f0.png)

この段階で実行してみて下さい。一番下の壁にボールが当たった際に音が再生されます。

# BGMを追加
Hierarchyの`Main Camera`を選択します。
`Main Camera`の[Inspector]タブの一番下にある[Add Compornent]ボタンをクリックして、[Audio]>[Audio Source]を選択します。
![Unity_AudioSourceAdd.gif](https://qiita-image-store.s3.amazonaws.com/0/14053/828a9926-b271-66bf-7e9a-5d64756bbbc0.gif)
次に`Audio Source`コンポーネントの`Audio Clip`のところにある○をクリックし、開いたリスト画面から`BGM`を選択します。
`Loop`にチェックを付けます。好みですが`Volume`を小さめに`0.1`にしました。
![Unity_AudioBGM2.png](https://qiita-image-store.s3.amazonaws.com/0/14053/9e4afbb0-08a9-bf4a-fcd6-29531c4be207.png)

# 実装を確認する
BGMと各種の効果音が付いてグっとゲームらしくなります。

プレイ動画といってもgifアニメーションなので音が鳴りませんけどね。
![Unity_Playing.gif](https://qiita-image-store.s3.amazonaws.com/0/14053/389c7b3b-5783-bf34-8433-67ff59b7e2a1.gif)

# 学んだこと
* 他スクリプトの修正が不要で音を鳴らすことができること
* BGMは`Main Camera`に付くこと

# フリーの音
* [クリックするだけで効果音を自動生成する「bfxr」 要Flash](http://inter-high-blog.unity3d.jp/2017/08/09/bfxr/)
* [アニメ風の効果音が収録された無料サンプルパック『464 free cartoon caper samples』](http://melodealer.com/musicradar-464-free-cartoon-caper-samples/)
* [フリーで使えるイケてる音ネタ・効果音サイトまとめ](http://www.sakumamatata.com/2016/10/blog-post_95.html)

# 参照
* [UnityとBlenderハンズオン第7章](https://www.slideshare.net/yaju88/unityblender7)
* [UnityとBlenderハンズオン第8章](https://www.slideshare.net/yaju88/unityblender8)
* [UnityとBlenderハンズオン第9章](https://www.slideshare.net/yaju88/unityblender9)
* [UnityとBlenderハンズオン第10章](https://www.slideshare.net/yaju88/unityblender10-55356833)