Unity が乱数を生成する方法 (シードの設定)

ランダムクラス

Random クラスは、乱数を生成するために使用
されるクラスの 1 つであり、乱数を生成するために使用できます。整数、浮動小数点数、ベクトルなど、さまざまな種類の乱数を生成するために使用できます。

整数

Random.Range を使用すると、指定された範囲内でランダムな整数または浮動小数点数を生成できます。以下に 2 つの例を示します。

        // 随机生成一个浮点数
        float randomNumber = Random.Range(0f, 1f);
        Debug.Log("随机float: " + randomNumber);

        // 随机生成一个整数
        int randomInt = Random.Range(1, 10);
        Debug.Log("随机int: " + randomInt);

実行結果は次のとおりです。
ここに画像の説明を挿入します

2D ベクトル

Random.insideUnitCircle を使用して、単位円内のランダムな 2 次元ベクトルを取得します。この方法は、ランダムな位置を生成するためによく使用されます。コードは次のようになります。

        // 随机生成一个二维向量
        Vector2 randomVector2 = Random.insideUnitCircle;
        Debug.Log("随机Vector2: " + randomVector2);

実行結果は次のとおりです。
ここに画像の説明を挿入します

3D ベクトル

Random.insideUnitSphere を使用して、ユニット球内のランダムな 3 次元ベクトルを取得します。この方法は、ランダムな方向およびモーション効果を生成するためによく使用されます。

        // 随机生成一个三维向量
        Vector3 randomVector3 = Random.insideUnitSphere;
        Debug.Log("随机Vector3: " + randomVector3);

実行結果は次のとおりです。
ここに画像の説明を挿入します

シード

Minecraft をプレイしたことがある人なら、シードについて知っているかもしれません。Minecraft をプレイするとき、マップがランダムに生成されることは誰もが知っていますが、同じシードからは同じマップが生成されることも知っています。これはなぜでしょうか? 実際、乱数の生成はシード計算に基づいており、同じシードからは同じランダム シーケンスが生成されます。

Unity での乱数生成も擬似乱数アルゴリズムに基づいています。つまり、実際にはシードから計算された決定論的な結果です。これは、同じシードが常に同じランダム シーケンスを生成することを意味します。

デフォルトでは、Random クラスのシードはシステム時間に基づきますが、Random.InitState メソッドを使用してカスタムでシードを設定することもできます。このメソッドは、乱数ジェネレーターのシードを初期化するために使用される整数をパラメーターとして受け入れます。

    	public int seed = 12345;  // 自定义的种子值
        Random.InitState(seed);  // 设置种子
        // 根据自定义种子生成随机数
        float randomNum = Random.Range(0f, 1f);
        int randomInt = Random.Range(1, 10);
        Vector3 randomVector = Random.insideUnitSphere;

        Debug.Log("随机float: " + randomNum);
        Debug.Log("随机int: " + randomInt);
        Debug.Log("随机Vector: " + randomVector);

上記の例では、最初に整数変数シードを定義してカスタム シード値を保存します。次に、Random.InitState(seed) を使用してシードを設定します。次に、Random.Range や Random.insideUnitSphere などの Random クラスの他のメソッドを使用して、カスタム シードに基づいて乱数を生成します。

複数回実行すると、同じ結果が得られます。
ここに画像の説明を挿入します
カスタム シードを設定すると、同じシード値で同じランダム シーケンスが生成されるようになります。これは、特定のランダム シーケンスを再現する必要がある場合に役立ちます。ただし、これにより、ランダム イベントの予測可能性やランダムに生成されたオブジェクト レイアウトの再現性など、いくつかの問題が発生する可能性があることにも注意する必要があります。したがって、プロジェクトのニーズに基づいて選択してください。

その他の記事

キャラクターが攻撃された後に画面が揺れるエフェクトをUnityで実現
カメラに追従する2Dゲーム(滑らかな動き)をUnityで実現

おすすめ

転載: blog.csdn.net/weixin_44499065/article/details/133393696
おすすめ