スポンサーリンク

【Unity】ランダムの実装方法

スポンサーリンク
Unity

基本的なランダム

using UnityEngine;

//ランダムサンプルクラス 
public class RandomSample : MonoBehaviour
{
    int seed = 1;                   //ランダム用のシード値

    int rangeMin_int = 0;           //乱数の最小値(int型)
    int rangeMax_int = 100;         //乱数の最大値(int型)

    float rangeMin_float = 0;       //乱数の最小値(int型)
    float rangeMax_float = 100.0f;  //乱数の最大値(int型)

    void Start()
    {
        //Seed値
        Random.InitState(seed);

        //0.0f ~ 1.0fの間
        Debug.Log(Random.value);

        //rangeMin_intとrangeMax_int-1の間(0 ~ 99)
        Debug.Log(Random.Range(rangeMin_int, rangeMax_int));

        //rangeMin_floatとRangeMax_floatの間(0 ~ 100.0f)
        Debug.Log(Random.Range(rangeMin_float, rangeMax_float));
    }
}

Random.value

//0.0f ~ 1.0fの間
Debug.Log(Random.value);

Random.valueは、0.0f ~ 1.0fの値をランダムで返してくれます。返ってくる値は、浮動小数点型のfloat型の値が返ってきます。

Random.Range(最小値 ,最大値)

//rangeMin_intとrangeMax_int-1の間(0 ~ 99)
Debug.Log(Random.Range(rangeMin_int, rangeMax_int));

//rangeMin_floatとRangeMax_floatの間(0 ~ 100.0f)
Debug.Log(Random.Range(rangeMin_float, rangeMax_float));

Random.Rangeは、最小値と最大値を決めて、その範囲内の値をランダムで返してくれます。
最小値と最大値には、int型とfloat型を入れることが出来ます。

1つ注意したいのが、int型の場合は、帰ってくるランダムの値の範囲が、最小値 ~ 最大値-1となってしまうことです。つまり、Random.Range(0,100)と入れると、0 ~ 99の値の範囲からランダムで値が返ってきます。

Random.InitState(シード値)

//Seed値
Random.InitState(seed);

random.InitStateは、ランダムな値を生成するための、シード値を設定することが出来ます。

シード値は、ランダムな値を生成するときに、最初に設定する値のことを言います。プログラムのランダムな値(乱数)は、完全にランダムな値を生成しているわけではなく、プログラムごとに何かしらのルールに沿って、計算されたランダムのような値が使われています。

なので、シード値を毎回同じものにすれば、何度実行しても同じ値が返ってくることになります。
逆に言えば、毎回違う値を入れれば、毎回違うランダムな値が返ってきます。

Random.InitState( System.DateTime.Now.Millisecond );

それっぽいランダムを実装したい場合は、seed値に日付データを入れることで、一度きりの値を再現することが出来ます。

タイトルとURLをコピーしました