しゅみぷろ

プログラミングとか

Unityのサウンド管理(SoundManager)

ゲームサウンド管理のためにSoundManager作りました。

使用方法

f:id:es_program:20160425235059p:plain

基本的には「追加」「削除」ボタンでサウンドを追加していきます。追加時に、左のテキストフィールドからサウンドに一意な名前をつけておきます。

例えば「TitleBGM」という名前をつけて追加すると、こんな感じになります。

f:id:es_program:20160425235100p:plain

それぞれのプロパティの説明は省きますが、AudioSourceで設定できる項目と同一になっています。

また、AudioManagerでは、音量の一括変更(ゲームでよくあるBGMやSEの音量設定)に対応するために、AudioMixerを利用しています。

f:id:es_program:20160425235101p:plain

こんな感じでSE,BGMなど用途ごとにAudioMixerを作成し、AudioManagerのサウンドに登録することができます。

このAudioMixerを弄ることで、サウンドに一括でエフェクトをかけたり、ボリュームやピッチ等を変更できます(サウンドごとに個々に設定するだけならばAudioManagerの機能だけで十分です)。

追加や編集を行ったら「適用」ボタンを押すことで、追加したサウンドデータをDictionaryで扱えるようになります。

上の画像では、「TitleBGM」「PlayerAttack」という2つのサウンドを登録しました。スクリプト上から再生する場合は

SoundManager.Instance.Play(AudioKey.TitleBGM);

という感じで呼び出すことができます。 AudioKeyは、「適用」ボタンを押した際に自動生成されるスクリプトの列挙体です。 また、このSoundManagerはSingletonMonoBehaviourを継承しているため、インスタンスがユニークであることが保証されます。SingletonMonoBehaviourに関しては以下の記事で紹介しています。

 

esprog.hatenablog.com

 

サウンドを扱いやすい形で一元管理出来るんじゃないかなぁと思ってます。

コード

もうちょっとプロパティやら機能やらを拡張して整形してからちゃんと載せようかなと思ってます。 完成したら配布できる形式にしようと思います。 現行のプロジェクトだったり私用だったりと最近ちょっと忙しいのでいつになるかはわかりません。。。

とりあえず今の段階でどんなコードになっているかを載せておきます。余計なファイルも一応くっつけてありますがそれぞれ

  • AudioKey.cs
    • SoundManagerによって自動的に更新されるスクリプトです。
  • SoundManager.cs
    • サウンドを管理するクラスです。
  • SoundSetting
    • サウンドのボリューム設定をLitJsonを使って保存、読み出しするクラスです。
  • MBLDefine
    • ゲーム内で使う定数的な値を保持しています。

て感じです。

Unity Audio Manager