はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】UnityEngineでの乱数の生成とSystemでの乱数生成について

はじめに

今回はUnityEngineでの乱数の生成とSystemでの乱数生成についての記事になります!

私は普段Unityを使っていて基本はUnityEngine.Randomクラスを使っています。

ただ非同期処理を使っているときにはUnityのAPIは使えないので、System.Randomクラスを用いた乱数を利用せざるを得ませんでした。

どうせそんなに変わらないだろうと思っていたのですが、少しだけ異なる点があったのでそれについて残しておきたいと思います。

やり方

System名前空間を使った乱数の生成がUnityEngine名前空間を使ったものと一番違うことは、インスタンスを作成するかどうかだと思います。

実際にみてみましょう。

using UnityEngine;

public class Test : MonoBehaviour
{
    private void Start()
    {
        //UnityEngine.Randomクラスを用いた場合
        int randomInt = UnityEngine.Random.Range(0, 11);        //0~10のランダムな整数(int)
        float randomFloat = UnityEngine.Random.Range(0f, 10f);  //0~10のランダムな実数(float)

        //System.Randomクラスを用いた場合
        System.Random random = new System.Random();
        randomInt = random.Next(0, 11);                         //0~10のランダムな整数(int)
        randomFloat = (float)random.NextDouble();               //0~1までの実数(float)
    }
}

確かにこれを見るとインスタンスを作成しなければならない分、Systemの方がやや冗長な気がします。

また実数の乱数を生成する場合もUnityEngine側に軍配が上がりそうです。

さいごに

やっぱりSystemの乱数はメインスレッドでなくても動作することが一番の利点な気がします。

それ以外はUnityEngineの方がいいのではないでしょか。