System.Enum クラス のメソッドを使うことで、いろいろ便利なことができます。
例として下のenumを使います。
public enum Weapon { Sword, Ax, Spear, Bow }
Enumの値名を文字列で取得する
enum型は内部的には数値なので、要素名をそのまま文字列として扱いたい場合は Enum.GetName メソッドで変換する必要があります。
// Enumの要素を文字列として取得 string name = System.Enum.GetName ( typeof(Weapon), Weapon.Ax ); Debug.Log (name);
Enumをforeachでループ処理
すべての要素を一度に 配列 として取得することもできます。
これなら for や foreach で扱うことができるので便利です。
GetValues メソッドとGetNames メソッドが使えます。
GetValuesでループ
enum型か、int型で受けることができます。
enum型で受ける場合
foreach (Weapon w in System.Enum.GetValues(typeof(Weapon))) {
数値で受ける場合
foreach (int w in System.Enum.GetValues(typeof(Weapon))) {
もしくは
foreach (var w in System.Enum.GetValues(typeof(Weapon))) {
GetNamesでループ
文字列配列で取得できます。
// Enumの要素を文字列として取得 string[] names = System.Enum.GetNames (typeof(Weapon)); // すべての要素を出力してみる foreach (string name in names) { Debug.Log (name); }
Enumの数
上記の配列取得を応用して、Enumの定義数を取得できます。
// enum の定義がいくつあるか int count = System.Enum.GetValues (typeof(Weapon)).Length;
int値をEnumに変換する
int test = 1; Weapon weapon = (Weapon)Enum.ToObject(typeof(Weapon), test);
Unityでのenum
インスペクタでenumをシリアライズすると、定義を変更しようとしたときにちょっと困ったことになるので注意です。
以下の過去記事参照