追記:改良版作りました!
オーディオのファイル名を定数で管理するクラスを自動作成する【Unity】【エディタ拡張】【LINQ】 - (:3[kanのメモ帳]
エディタ拡張とは
とりあえず↑こんな感じです。
AudioNameCreator.cs
では先にコードを公開。
以下のコードをかなり参考にしております。
↑こちらのエディタ拡張もかなり便利!
使い方
まず、オーディオファイルをBGM用とSE用に分けてResources以下のフォルダにいれます。
上記の用に、BGMまたはSE以下にフォルダを作り、分類しても問題ありません。
次にAudioNameCreator.csをEditorフォルダに入れると以下のように、Tools/Create/AudioNameというメニューが使えるようになります。
これを実行するとScripts/Constants/AUDIO.csと言うファイルが出来上がります。
/// <summary> /// オーディオ名を定数で管理するクラス /// </summary> public static class AUDIO { public const string BGM_BATTLE = "Battle"; public const string BGM_BOSSBATTLE = "BossBattle"; public const string BGM_MAP = "Map"; public const string BGM_TOPMENU = "TopMenu"; public const string SE_DAMAGE = "Damage"; public const string SE_SKILLLEARNING = "SkillLearning"; public const string SE_VANISHING = "Vanishing"; }
これで以下の用に、他のスクリプトからオーディオのファイル名を呼び出す事が出来るようになりました!
//"Vanishing"が返って来る string seName = AUDIO.SE_VANISHING;
実はこれ単体ではそんなに役に立たないのですが、自家製AudioManagerを使うと真価を発揮します…!
OnPostprocessAudioから呼ぶ
最初に紹介した記事でも書かれていますが、AssetPostprocessorを継承したクラスで、 void OnPostprocessAudio () というメソッドを記述すると、オーディオファイルがインポートされた直後にそのメソッドが実行されます。
void OnPostprocessAudio () { AudioNameCreator.Create (); }
なので、上記の用に記述するとオーディオがインポートされる度にAUDIO.csを作り直してくれます。
コード説明
AudioNameCreator.csの中で重要そうな所だけコード説明です。
MenuItem
[MenuItem(COMMAND_NAME)]以下に書かれたコードをCOMMAND_NAMEで指定されたボタンを押した時に実行するようにします。
また、第二引数をtrueにすると、それ以下のメソッドでそのメニューが使えるかを判断するようです(多分…)。
.ToUpper()
string型で.ToUpper()とすると大文字になるようです。また小文字にするには.ToLower()です。
定数だったので大文字にしてるんですが、c#では定数を大文字+アンダーバー区切りで表現しないという噂が…!
Resources.LoadAll
Resources以下にあるファイルを全て取得する事が出来ます。
また、今回のようにパスを指定する事でそのパス以下の(さらに下のファルダ内も含めた)全ファイルを取得します。
//指定したパスのリソースを全て取得 object[] bgmList = Resources.LoadAll("Audio/BGM"); object[] seList = Resources.LoadAll("Audio/SE");
記事では分かりやすさのため、"Audio/BGM"とパスを指定しましたが、実際のコードではDATA.BGM_PATHというようにDATAというstaticクラスにパスをまとめています。
おわりに
上でも書きました、自家製のAudioMangerと一緒に使う事でよりよく使えます!
本当は一緒に書くはずが長くなってしまったため分けることに…
あと、出来ればAUDIO.cs内の定数名を決める時に大文字にするだけでなく、アンダーバーで区切りたかったんですが…めんどうなのでファイル名側で調整する事にしました。