Unity C# Enumを活用する便利関数まとめ
下記をまとめてコピペし、然るべきusing~を追加して使う。
/// <summary>
/// enumの要素数を返す
/// </summary>
public static int GetEnumLength<T>() where T : Enum
{
return Enum.GetValues(typeof(T)).Length;
}
/// <summary>
/// enumの最大値を返す
/// </summary>
public static T GetEnumMax<T>() where T : Enum
{
return Enum.GetValues(typeof(T)).Cast<T>().Max();
}
/// <summary>
/// 指定値の次のenumを返す
/// </summary>
public static T Next<T>(T val) where T : Enum
{
var arr = GetEnumValues<T>();
var newIdx = Array.IndexOf<T>(arr, val) + 1;
return newIdx >= arr.Length ? arr[0] : arr[newIdx];
}
/// <summary>
/// 指定値の前のenumを返す
/// </summary>
public static T Previous<T>(T val) where T : Enum
{
var arr = GetEnumValues<T>();
var newIdx = Array.IndexOf<T>(arr, val) - 1;
return newIdx < 0 ? arr[arr.Length - 1] : arr[newIdx];
}
/// <summary>
/// 指定インデックスのenumを取得する
/// </summary>
public static T GetEnum<T>(int idx) where T : Enum
{
try
{
return GetEnumValues<T>()[idx];
}
catch
{
Debug.LogFormat("<color=red>{0}, {1}</color>", typeof(T), idx);
return default;
}
}
/// <summary>
/// ランダムなenum値を取得する
/// </summary>
public static T RandomEnum<T>() where T : Enum
{
try
{
return GetEnumValues<T>()[UnityEngine.Random.Range(0, GetEnumLength<T>())];
}
catch
{
return default;
}
}
/// <summary>
/// enumの全要素を配列で取得する
/// </summary>
public static T[] GetEnumValues<T>() where T : Enum
{
return (T[]) Enum.GetValues(typeof(T));
}
/// <summary>
/// enumの全要素をリストで取得する
/// </summary>
public static List<T> GetEnumValuesList<T>() where T : Enum
{
var array = GetEnumValues<T>();
var list = new List<T>(array.Length);
foreach(var val in array)
{
list.Add(val);
}
return list;
}
この記事が気に入ったらサポートをしてみませんか?