二代目備忘録スマートフォン用の表示で見る二代目備忘録2018-11-29Unity備忘録24頁目「サウンドを鳴らす」Unity江上宿六です。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を指定してやれば良いわけですけどもちょっとこれは失敗ですね。簡潔に指し示す術があるハズです。いう事になるとやはりオブジェクト毎にサウンドを設定する方が良かったのかと思ったりもしますね。重くはなったりはしないのかな。これでサウンドの再生は出来るようになりました。次回はアニメーション関連をやれたらという所です。