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です。 お絵描きとゲ制してまーす。

この記事をシェア

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

関連する記事

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
2022年8月13日
traQにOBからバグ報告が来た
logica icon logica
記事一覧 タグ一覧 Google アナリティクスについて