📚
UnityEngine.RandomとSystem.Randomの違い
普段実装してるときにどっちの乱数使うべきなんか迷うことがあったのでちゃんと調べてみた.
目的の違い
UnityEngine.Random
- 主にゲーム用途
- staticでアクセスする
- float upperboundを含む (
UnityEngine.Random.Range(0f,1f)
) - 速度: System.Randomに対して、20-40%早い
System.Random
- 汎用的な用途
- instance経由でアクセスする
- float upperboundを含まない (
System.Random.NextDouble()
) - 速度: -
使い方
浮動小数点の乱数を作る
float sfloat = (float)(new System.Random().NextDouble()); // exclusive 1.0
float ufloat = UnityEngine.Random.Range(0, 1f); // inclusive 1.0
intの乱数を作る
int sInt = new System.Random().Next(0, 10); // exclusive 10
int uInt = UnityEngine.Random.Range(0, 10); // exclusive 10
seedを設定する
var random = new System.Random(1);
UnityEngine.Random.InitState(1);
感想
パフォーマンスギリギリまで攻めるならUnityEngine.Random.
乱数の再現性を高くしてテスタビリティを確保するなどの用途ではSystem.Random.
という印象.
Discussion