この記事は夏のブログリレー5日目の記事です。
はじめに
みなさんこんにちは。21Bのさばにしです。
普段はお絵描きなどをしています。
ですがこの記事とはお絵描きとはあんまり関係が無いUnityに関する記事です。
SoundManagerとは
ゲームに音声は付き物です。最近のゲームでSEもBGMも無いゲームって滅多に無いと思います。そのため、ゲーム制作エンジンUnityにも音を鳴らすシステムがありますが、これが結構使いにくいです。
音を聴くためのAudioListner、音を鳴らすためのAudioSource、およびAudioClipを使うのですが、音声素材を増やしていくとこれらがごちゃごちゃしてきます。
それを整理、管理するために作るのがSoundManagerです。
お気持ち
今の時代、ググったら先人が作った優秀なSoundManagerが山のように見つかります。今更作っても車輪の再発明感ありありですが、勉強になるので気にしてはいけません。
こだわりポイント
せっかく作るのですから、色々拘りました。
- 音声ファイルを列挙型で指定できるようにする
- 文字列(string型)で指定したらタイポしそう、する
- 1の列挙型を自動生成する
- Assetsフォルダに音声ファイルぶちこむだけでつかえるようにしたい
- 一度に再生する音声に限度をつける
- 同時に大量の音声を流したら爆音で耳壊れる
実装
クラス構成
- SoundManager.cs
- 音声ファイルの管理、再生、停止を行うクラス
- SE_Enum.cs、BGM_Enum.cs
- ファイルを指定するための列挙型
- EnumCreator.cs
- 2の列挙型を作成するクラス
- AssetObserver.cs
- Assetsフォルダを監視して、変更があったらEnumCreatorを実行するクラス
使用した技術
- キュー
- データ構造の一種。先入れ先出し。
- 一度に流す音声を制限し、順次流していく処理を行うために使った。
- エディタ拡張
- Unityの機能の一種。
- 色々できるらしいけど、今回は特定フォルダの書き換えがあった時に、特定のスクリプトを実行するやつを使った。
- まだ勉強中。
完成したやつ
これ↓
動作確認はバージョン2020.3.24f1でしか行なっていません。もし他のバージョンで動かなかったら、私に教えていただけると嬉しいです。
感想
意外とサクッと完成した。こだわりポイントを無事全部実装できたので満足している。
しかしソースコードがありえん汚いのでいつかリファクタリングしたい。
明日の夏のブログリレー担当者は@Takeno_hitoさんです。 楽しみ〜