Unity++blog.

UnityやC#とかについて学習したことを書いてます

どのプロジェクトでも使える便利なオーディオ管理クラス

オーディオミキサーを使うまでもない場合のプロジェクトでも、ばらばらに適当なオブジェクトにオーディオソースをつけて音の管理をしていると、どこに付けたかな~??と見つけるのに困ってしまうので、オーディオをひとまとめにクラスを作成しました。

欠点としては3Dサウンドを扱うことができないことですが、2DサウンドでよいBGMの切り替えなどやセリフなどでは活躍してくれる場がありそうです。

 

今回は下のようなシーンを作成して、sphereがcubeに当たったら音を鳴らし、離れたら音が止まるという風にします。

f:id:nabesi777:20190318213429p:plain

 

空オブジェクト(名:AudioManager )を用意して下のスクリプトをアタッチします。

 

 

 

次にcubeにrigitbodyとboxcolliderをつけ、sphereにもcollierをつけます。

f:id:nabesi777:20190422221004p:plain

 

 そしてcubeに以下のスクリプトを作成してアタッチします。ここはなんでもいいので何も考えず適当に、当たり判定をとってブーリアンでイベント発生の切り替えをするようにしました。実際に使うときは、Updateに「PlayTrigger(_cubeScript.PlayTrigger, "TestBGM");」などと書かず、UniRxを使って値の変動を監視した方が良さそうです。

 

 

最後にAudioManagerにオーディオクリップやイベント通知をするオブジェクトを格納して終了です。今回はテストなので1つのオーディオソースクリップを入れました。

f:id:nabesi777:20190318214233p:plain

 sizeに1を入れて、Cubeも格納して、ひとつのオーディオソースオブジェクトを生成します。必要に応じて下図のように各項目を入れていきます。

f:id:nabesi777:20190422221132p:plain



 これで好きなタイミングで音を鳴らしたり止めたりすることができました。

f:id:nabesi777:20190422221907g:plain



 改造余地は沢山あると思うので参考まで。