はじめに
public enum JOB_TYPE { NONE , // 不明 SOLDIER , // 王国兵士 SORCERER , // 魔法使い HUNTER , // 狩人 SIZEOF , // 番兵 }
僕は普段のゲーム開発で列挙型を使用する時に
下記のようなクラスや拡張メソッドを使用して処理を記述することが多々あります
var jobType = JOB_TYPE.SOLDIER; // アッパーケースの文字列に変換 Debug.Log( jobType.ToUpper() ); // SOLDIER // ローワーケースの文字列に変換 Debug.Log( jobType.ToLower() ); // soldier // アッパーキャメルケースの文字列に変換 Debug.Log( jobType.ToUpperCamel() ); // Soldier // ローワーキャメルケースの文字列に変換 Debug.Log( jobType.ToLowerCamel() ); // soldier // コメントの文字列に変換 Debug.Log( jobType.ToComment() ); // 王国兵士 // 文字列から JOB_TYPE の要素に変換 var result = JobTypeUtils.FromString( "SOLDIER" ); // JOB_TYPE のすべての要素を列挙 foreach ( var n in JobTypeUtils.List ) { } // JOB_TYPE.NONE を除くすべての要素を列挙 foreach ( var n in JobTypeUtils.ListWithoutNone ) { } // JOB_TYPE の要素数を取得 Debug.Log( JobTypeUtils.Count ); // JOB_TYPE.NONE を除く要素数を取得 Debug.Log( JobTypeUtils.CountWithoutNone ); // Dictionary の comparer を指定してメモリ割り当てを削減 var dict = new Dictionary<JOB_TYPE, string>( new JobTypeComparer() );
こういった便利なクラスや関数をすべての列挙型に対して手動で記述するのは大変なので
Unity のエディタ拡張を使用してこれらのクラスや関数が自動で生成されるようにしています
今回はそのエディタ拡張の機能を紹介していきます
使い方
こちらの GitHub に公開されている EnumCreator.cs を
Unity プロジェクトの Editor フォルダに追加します
そして、Editor フォルダに「enum.xml」という名前のテキストファイルを作成します
その後、ゲームで使用する列挙型を「enum.xml」に下記のように記述します
<root> <enum name="param_type" comment="パラメータタイプ"> <param name="none" comment="不明" /> <param name="flame" comment="炎" /> <param name="thunder" comment="雷" /> <param name="ice" comment="氷" /> </enum> <enum name="job_type" comment="ジョブタイプ"> <param name="none" comment="不明" /> <param name="soldier" comment="王国兵士" /> <param name="sorcerer" comment="魔法使い" /> <param name="hunter" comment="狩人" /> </enum> </root>
これで列挙型を自動生成する準備が完了したので
Unity メニューの「Tools>Create Enum」を選択します
完了ダイアログが表示されたら OK ボタンを押します
これで Project ビューの Script フォルダに「Enum.cs」というスクリプトが作成されて、
列挙型と、それに関するクラスや拡張メソッドが定義されます
成果物の「Enum.cs」がどのように作成されるかは下記の GitHub で閲覧できます
以上が EnumCreator.cs の使い方になります
まとめ
列挙型に紐付く便利なクラスや拡張メソッドをこのように自動生成できる環境を作っておくと
UI やデバッグメニュー、チートコマンドを実装する時にキレイなコードが記述できます
興味がある方はぜひ導入してみて頂ければと思います