📚

UnityEngine.RandomとSystem.Randomの違い

2021/12/27に公開

普段実装してるときにどっちの乱数使うべきなんか迷うことがあったのでちゃんと調べてみた.

目的の違い

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