トリガー駆動のタイミングでSEを鳴らす前章でUnityでのサウンド再生の根っこを見てきました。Soundを世界にポイっと投げれば勝手に音が鳴るんですから簡単です。ゲームで実際に使うにはもう少し考える事があります。SEは何らかのきっかけで初めて音が鳴ります。マリオがジャンプしたら「ぴゅい〜ん」とジャンプ音がしますよね。「ジャンプをしたら」というのが「きっかけ」で、そういうきっかけの事を「トリガー」と言います。お手元のゲームを観察すると分かると思いますが、SEはトリガー駆動が殆どです。Unityでトリガー駆動なSEを再生するにはどうしたら良いか?試行錯誤してみます。トリガーを作ろうまずはトリガーそのものを作ってみましょう。実際はあらゆるトリガーが考えられますが、今はテストなので「キーを押したら」にしておきます。Unityでキー入力を取るには「Input」というグローバルなクラスをスクリプト上で使用します。Object]で空のオブジェクトを一つ追加して「Player」という名前に変更しておきましょう。PlayerゲームオブジェクトにくっつけるPlayerスクリプトをProject内に追加します。);}}}このスクリプトをPlayerゲームオブジェクトにくっつけてゲームを再生すると、Aキーを押すたびにConsoleウィンドウに「A!」と表示されます。これでトリガーが出来ました。「A」を押すたびにSEを鳴らす音を鳴らすにはどうしたら良いかおさらいします。音を鳴らす人は「AudioSource」さんです。この人に音の素であるAudioClipをくっつけるとその音が鳴ります。AudioSourceさんはComponentなので、GameObjectにくっつけないと存在出来ません。AudioClipはリソースなので、スクリプト内に保持する事が出来ます。そこで、PlayerさんにAudioSourceコンポーネントをくっつけて、AuidoClipを一つ保持させる事にしましょう。Source]でくっつきます。一方で上のPlayerスクリプト内にAudioClipを一つ設けます。publicで公開するとInspector上にAudioClipの設定欄が一つできますので、そこにProject内のAudioClip(kaifuku)をドラッグしてあげます。Clipは空のままにするのが大切です。ここに入れるとトリガー関係無くいきなり音が鳴ってしまいます。Sourceさんです。);}}}実際これでAudioSourceコンポーネントを取得できます。出来ちゃえばこっちのもんで、鳴らしたいauidoClipをAudioSourceにスクリプト上からくっつけてしまえます。);audioSource.Play();}}これで「A」を押すと音が鳴ります(^-^)。AudioSource.Playメソッド呼び出しでOKです。SEが重ならない!さて、上の実装で実際に「A」を押す度にSEが鳴るのですが、「A」をダダダダダダ!っと連打すると、SEがその度に最初から再生されるのがわかります。長いSEを使うと顕著にわかるはずです。状況にもよりますが、SEは重なって鳴って欲しい事が殆どです。「A」を押す度にSEを重ねるには、AudioSource.PlayメソッドではなくてAudioSource.PlayOneShotメソッドで音を鳴らします。);}}これで「A」を連打すると、音が途切れずに重なる事がわかります。PlayメソッドとPlayOneShotメソッドは、多分前者がBGM、後者がSEで使うように出来ているのかなと思います。このように、AudioClipとAudioSourceがスクリプト上でわかっていれば、任意のタイミングでSEを鳴らす事は簡単です。これで使い勝手が良いかというと「ん〜〜...」となってしまいます。SEって何かする度に色々な所から鳴ります。それを逐一GUIで追加していくのは正直しんどいのです。スクリプトの中だけで完結してくれると気楽です。次の章ではその辺りを考えて行く事にしましょう。