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;
}

この記事が気に入ったらサポートをしてみませんか?