江上宿六です。
BGMやSEは言うまでも無くゲームに欠かせない要素ですね。
Unityでは簡単にサウンドの再生が出来るので早速やってみましょう。
サウンドを再生するにはAudioSourceを使います。 これはオブジェクトに
追加出来るコンポーネントで、インスペクターのAddComponentから追加できます。
問題はどのオブジェクトに追加するかという点ですが、ここは好みですかね。
個人的にはゲームを制御するオブジェクト、あの球体が落ちてくるゲームでは
GameDirectorとしていたものに追加したいんですけど、考え方としては
音を発生させるオブジェクト毎に追加して設定するというのもあると思うんです。
管理は大変になりそうですけど。 ともかく今回はGameDirectorの方です。
↓
AddComponent→Audio→AudioSourceと選択することで追加出来ました。
見ての通り色々な項目がありますが、とりあえず知っておくべき所を説明します。
AudioClipは再生するサウンドファイルです。 アセットに追加したサウンドの
ファイルをセットする事ができます。
PlayOnAwakeはこのコンポーネントを持つオブジェクトが生成された時に
まず再生するというものだと思います。 SEの場合であれば多分不要でしょう。
Loopはループです。 多分オブジェクトが破棄されるまでループします。
SEには不要ですけどBGMならばチェックを入れておくのもありでしょう。
それより下のスライダーに関しては音質やボリューム、ピッチなど再生のされ方に
影響を及ぼす物だと思いますが、今回は別に気にしなくても良いものでしょう。
それでは使ってみましょう。 サウンドファイルをAudioClipの所にセットします。
今回は衝突時のSEを設定するのでPlayOnAwakeのチェックは外しておきましょう。
だいたいこんな感じになります。 そうしたらスクリプトを編集します。
GameDirector用のスクリプトですね、GameDirectorのコンポーネントですので。
このようにGetComponent<AudioSource>().Play()とするだけでセットされた
サウンドファイルを再生する事が出来ます。 その為の関数を作成しました。
それを自キャラ用のスクリプト内の球体と衝突した時に呼び出される
OnCollisionEnter内で呼び出すように記述しました。 これによって衝突時に
このGameDirectorのAudioSourceにセットされた音が再生されるようになりました。
しかしこれだとセットされた一種類のサウンドしか再生できません。
ゲームとしてこういう事はあり得ないわけなので、これを解決する事にしましょう。
GameDirectorスクリプト内でこのようにAudioClipとAudioSourceを宣言しました。
AudioClipはpublicで宣言しています。
Start関数内でAudioSourceを取得して扱える様にしておきます。
そうしたら先ほどのPlaySound関数に変更を加えます。
殆ど同じですが、Play()がPlayOneShot()になっています。 これは
指定のサウンドファイルを一度だけ再生するという処理だと思います。
そのサウンドファイルは何なのかというと、先ほどpublicで宣言したclipです。
このようにアウトレット接続してやる事で再生するファイルを設定出来ます。
そして再生するにはこのようにclipを指定してやれば良いわけですけども
ちょっとこれは失敗ですね。 もっと簡潔に指し示す術があるハズです。
こういう事になるとやはりオブジェクト毎にサウンドを設定する方が良かったのかと
思ったりもしますね。 重くはなったりはしないのかな。
ともかくこれでサウンドの再生は出来るようになりました。
次回はアニメーション関連をやれたらという所です。