feature image

2022年8月14日 | ブログ記事

[Unity]泛用SoundManager作った[令和最新版]

この記事は夏のブログリレー5日目の記事です。

はじめに

みなさんこんにちは。21Bのさばにしです。
普段はお絵描きなどをしています。
ですがこの記事とはお絵描きとはあんまり関係が無いUnityに関する記事です。

SoundManagerとは

ゲームに音声は付き物です。最近のゲームでSEもBGMも無いゲームって滅多に無いと思います。そのため、ゲーム制作エンジンUnityにも音を鳴らすシステムがありますが、これが結構使いにくいです。

音を聴くためのAudioListner、音を鳴らすためのAudioSource、およびAudioClipを使うのですが、音声素材を増やしていくとこれらがごちゃごちゃしてきます。
それを整理、管理するために作るのがSoundManagerです。

お気持ち

今の時代、ググったら先人が作った優秀なSoundManagerが山のように見つかります。今更作っても車輪の再発明感ありありですが、勉強になるので気にしてはいけません。

こだわりポイント

せっかく作るのですから、色々拘りました。

  1. 音声ファイルを列挙型で指定できるようにする
    • 文字列(string型)で指定したらタイポしそう、する
  2. 1の列挙型を自動生成する
    • Assetsフォルダに音声ファイルぶちこむだけでつかえるようにしたい
  3. 一度に再生する音声に限度をつける
    • 同時に大量の音声を流したら爆音で耳壊れる

実装

クラス構成

  1. SoundManager.cs
    • 音声ファイルの管理、再生、停止を行うクラス
  2. SE_Enum.cs、BGM_Enum.cs
    • ファイルを指定するための列挙型
  3. EnumCreator.cs
    • 2の列挙型を作成するクラス
  4. AssetObserver.cs
    • Assetsフォルダを監視して、変更があったらEnumCreatorを実行するクラス

使用した技術

  1. キュー
    • データ構造の一種。先入れ先出し。
    • 一度に流す音声を制限し、順次流していく処理を行うために使った。
  2. エディタ拡張
    • Unityの機能の一種。
    • 色々できるらしいけど、今回は特定フォルダの書き換えがあった時に、特定のスクリプトを実行するやつを使った。
    • まだ勉強中。

完成したやつ

これ↓

sabanisi/SoundManager - GitHub

動作確認はバージョン2020.3.24f1でしか行なっていません。もし他のバージョンで動かなかったら、私に教えていただけると嬉しいです。

感想

意外とサクッと完成した。こだわりポイントを無事全部実装できたので満足している。
しかしソースコードがありえん汚いのでいつかリファクタリングしたい。

明日の夏のブログリレー担当者は@Takeno_hitoさんです。 楽しみ〜

sabanishi icon
この記事を書いた人
sabanishi

21Bです。 お絵描きとゲ制してまーす。

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2023年4月17日
ポケモンを飼いたい夢を叶える
tqk icon tqk
2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2022年9月26日
競プロしかシラン人間が web アプリ QK Judge を作った話
tqk icon tqk
2022年9月16日
5日でゲームを作った #tararira
Komichi icon Komichi
2022年8月29日
ケモナー向け VRChatの始め方、歩き方。VR無くてもできる!
pikachu icon pikachu
2022年8月30日
【競プロer向け】母関数を習得しよう!
tatyam icon tatyam
記事一覧 タグ一覧 Google アナリティクスについて