はじめに
今回は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
の方がいいのではないでしょか。