以下の内容はhttps://marumaro7.hatenablog.com/entry/enumrandomより取得しました。


【Unity】列挙型の要素をランダムに取得する方法

はじめに

列挙型の要素をランダムに取得したくなったのでメモ

コード

以下を実行することで、ランダムに列挙型の要素を取得できます。

using System;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    //列挙型の宣言
    public enum TEST_TYPE
    {
        UP,
        DOWN,
        RIGHT,
        LEFT
    }

    //列挙型TEST_TYPEの変数testTypeを宣言
    private TEST_TYPE testType;

    private void Start()
    {
        //1000回繰り返して確認
        for (int i = 0; i < 1000; i++)
        {
            RandomTest();
            Debug.Log(testType);
        }
    }

    private void RandomTest()
    {
        //enum型の要素数を取得
        int maxCount = Enum.GetNames(typeof(TEST_TYPE)).Length;

        //ランダムな整数を取得
        int number = UnityEngine.Random.Range(0, maxCount);

        //int型からenum型へ変換
        testType = (TEST_TYPE)Enum.ToObject(typeof(TEST_TYPE), number);
    }
}

実行結果

ランダムに要素が取得できていることがわかります。

ざっくり解説

ランダムに取得する肝の部分は、以下のコードになります。
内容はコメントのとおりです。

    private void RandomTest()
    {
        //enum型の要素数を取得
        int maxCount = Enum.GetNames(typeof(TEST_TYPE)).Length;

        //ランダムな整数を取得
        int number = UnityEngine.Random.Range(0, maxCount);

        //int型からenum型へ変換
        testType = (TEST_TYPE)Enum.ToObject(typeof(TEST_TYPE), number);
    }



列挙型の要素は特に指定しない場合、
設定した文字列に対しては、数字が0から順に割り当てられます。

    //列挙型の宣言
    public enum TEST_TYPE
    {
        UP = 0,
        DOWN = 1,
        RIGHT = 2,
        LEFT = 3
    }


今回、これを利用してランダムな要素を取得しています。
1.列挙型の要素数を数える(今回は4) 

2.列挙型の要素数の値を最大値としてランダムな数を取得
 (最大値は4で設定されるため、0,1,2,3のいずれかの数字が生成される)
 ※ランダム関数 整数を返す場合は最大値が含まれない

3.取得した数字と対応する列挙型を取得
 (2が生成された場合、2と対となる要素 RIGHTを取得)

おわりに

最初、列挙型が0から始まるのを忘れていて
ランダム関数の最大値を+1でコードを書いていました。

これをすると列挙型の範囲を超えるパターンがあるのですが、
エラーは発生しないのでバグを埋め込んだことに気付きにくいです。

気をつけてください〜。

        //ランダムな整数を取得
        int number = UnityEngine.Random.Range(0, maxCount+1);

他の記事

marumaro7.hatenablog.com




以上の内容はhttps://marumaro7.hatenablog.com/entry/enumrandomより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14