読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

enumを作成するエディタ拡張【Unity】【エディタ拡張】

Unity エディタ拡張

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

この記事でのバージョン
Unity 5.4.0f3


はじめに

以前、定数を管理するクラスを作成するエディタ拡張という記事を書きました。



これはいわゆる定数クラスと呼ばれるクラスを生成するためのエディタ拡張です。


これ単体だとあまり意味はありませんが、

何かしらのファイルを監視し、変更があった時に定数を更新する

みたいな使い方をするとなかなか便利なものでした。



今回はそれのenumバージョンのご紹介!

場合によっては定数ではなくenumの方が都合が良い場合もあると思い、作成しました。


EnumCreator

さっそくコードです。



使い方は以下のようにEnumCreator.Createで各引数を指定して実行するだけです。

//Enumの項目をstringでまとめる
List<string> itemNameList = new List<string> () {
  "Hoge", "Hage", "Age", "NagaiNamaeNoAitemu"
};

//Enum作成
EnumCreator.Create (
  enumName     :"TestEnum",          //enumの名前
  itemNameList :itemNameList,        //enumの項目
  exportPath   :"Assets/TestEnum.cs",//作成したファイルのパスをAssetsから拡張子まで指定
  /*以下は省略可能*/
  summary      :"さまりー",             //enumの説明
  nameSpace    :"Test",              //nameSpaceの名前
  isFlags      :true                 //Flag属性を付けるあどうか
);


上記のコードで生成したTestEnum.csは以下の通りです。

namespace TestEnum{
  /// <summary>
  /// さまりー
  /// </summary>
  [System.Flags]
  public enum TestEnum{
      Hoge               = 1 << 0,
      Hage               = 1 << 1,
      Age                = 1 << 2,
      NagaiNamaeNoAitemu = 1 << 3,
  }
}


また、省略可能な3つの引数を省略して生成した場合は以下の通りです。

public enum TestEnum{
    Hoge               = 0,
    Hage               = 1,
    Age                = 2,
    NagaiNamaeNoAitemu = 3,
}  


さらに、Enumの項目とその数値をDictionaryで指定して作成することも可能です。

//Enumの項目をstring、その数値をintでまとめる
Dictionary<string, int> itemDict = new Dictionary<string, int> () {
  {"Hoge", 0}, {"Hage", 15}, {"Age", 40}, {"NagaiNamaeNoAitemu", 123456789}
};

//Enum作成
EnumCreator.Create (
  enumName     :"TestEnum",              //enumの名前
  itemDict     :itemDict,                //enumの項目
  exportPath   :"Assets/TestEnum.cs",    //作成したファイルのパスをAssetsから拡張子まで指定
  /*以下は省略可能*/
  summary      :"さまりー",                 //enumの説明
  nameSpace    :"Test"                   //nameSpaceの名前
);


上記のコードで生成したTestEnum.csは以下の通りです。

namespace Test{
  /// <summary>
  /// さまりー
  /// </summary>
  public enum TestEnum{
      Hoge               = 0,
      Hage               = 15,
      Age                = 40,
      NagaiNamaeNoAitemu = 123456789,
  }
}


省略可能な2つの引数を省略して生成した場合は以下の通りです。

public enum TestEnumDict2{
    Hoge               = 0,
    Hage               = 15,
    Age                = 40,
    NagaiNamaeNoAitemu = 123456789,
}


なお、既に同名のファイルがある場合は上書きされるので、注意が必要です。