列挙型
今回は列挙型と呼ばれるenumに対しての処理というか使い方についての記事です。
public enum StatusType{ HP = 0, ATK, DEF, SPD }
上記のようなRPGの能力を表したenumを例として使っていきます。
列挙型→数値or文字列
enumの項目を数値や文字列に変換するには以下のようにします。
int atkNo = (int)StatusType.ATK; string atkStr = StatusType.ATK.ToString (); Debug.Log (atkStr + " : " + atkNo);
ATK : 1
数値にするには(int)、文字列にするにはToString()を使います。
また、各項目の数値は最初の項目(StatusTypeならHP)から1づつ増えてきます。
なので、例えばHP = 1にすれば、 ATKは2になります。
数値or文字列→列挙型
数値や文字列をenumの項目に変換するには以下のようにします。
なお、Enumを使うにはusing Systemが必要です。
StatusType status1 = (StatusType)Enum.ToObject(typeof(StatusType), 2); StatusType status2 = (StatusType)Enum.Parse(typeof(StatusType), "SPD"); Debug.Log (status1 + " : " + status2);
DEF : SPD
数値から変換するにはEnum.ToObject()、
文字列から変換するにはEnum.Parse()を使います。
項目数の取得、列挙
enumの項目数を取得と全項目を列挙するには以下のようにします。
Array statusTypeArray = Enum.GetValues (typeof(StatusType)); Debug.Log ("項目数 : " + statusTypeArray.Length); foreach(StatusType statusType in statusTypeArray){ Debug.Log (statusType); }
項目数 : 4
HP
ATK
DEF
SPD
Enum.GetValuesでEnumの項目をArrayに出来ます。
このArrayのLengthを見れば項目数が分かりますし、foreachで回せば全項目が列挙出来ます。
TypeData
enumに対する便利メソッドみたいなものと、汎用的使うenumを定義するクラス、
TypeDataをいつも使っているので、ついでにこれもご紹介!
使い方は以下の通りです。
string atkStr = TypeData.StatusType.ATK.ToString(); int atkNo = (int)TypeData.StatusType.ATK; //入力されたkeyが設定されたタイプに含まれるか判定 if(TypeData.ContainsKey<TypeData.StatusType>(atkStr)){ Debug.Log ("ATKあるよ!"); } //入力されたkeyと同じ列挙型の項目を取得する Debug.Log (TypeData.KeyToType<TypeData.StatusType>(atkStr)); //入力されたNoと同じ列挙型の項目を取得する Debug.Log (TypeData.NoToType<TypeData.StatusType>(atkNo)); //指定した列挙型の項目数を取得する Debug.Log (TypeData.GetTypeNum<TypeData.StatusType>());
ATKあるよ!
ATK
ATK
4
各メソッドはジェネリックメソッドにしてあるので、
<>内を変えれば他のenumでも使えて便利!
下三つのメソッドの処理が1行しか無いので、コードが劇的に短くなったりはしないのですが、
Enum.Parseをそのまま使うよりKeyToTypeのが分かり易いかな〜と思ったりしとります。