おそらく最も重要な違いは、Unityの方Random.Range
が少し使いやすく、静的であるということです。System.Random
ただし、C#基本クラスライブラリは、より多くの制御と分離を提供します。
彼らは異なる内部の実装も使用する可能性があります(私の推測ではUnity Random
はシステムの観点から実装されているだけでしょうRandom
)が、それはおそらく注目すべき問題ではありません。基本的に、これらは両方とも同じ種類の乱数ジェネレーターである可能性があります。つまり、シードによって定義されたシーケンスの反復に基づいた擬似乱数ジェネレーターです。
コンテキストによっては、さまざまなものに異なるランダムストリームを使用する場合があるため、制御の問題はより関連性があります。たとえば、ロックステップネットワーキングネットワーキングコンテキストでは、ゲーム内のすべてのプレーヤーでランダムなゲームプレイに影響するイベントを生成するために使用されるシードを修正することができますが、純粋に使用される乱数のストリームについてはあまり気にしない場合があります視覚的なイベントを生成し、そのストリームをより伝統的な方法でシードできるようにすることができます(たとえば、ゲームの起動時のシステムの稼働時間)。
同様に、複数のスレッドで乱数を生成する場合は、競合状態を防ぐために、スレッドごとに個別のランダムオブジェクトを使用することができます。これは、ゲームロジックが多数のスレッドで実行され、たとえばゲームプレイリプレイシステムもある場合に発生する可能性があります。
結局のところ、一般的にどちらか一方を使用する方が必ずしも良いとは限らず、むしろ賛否両論があります。発生する可能性のある他の潜在的なランダムシーケンスから数値のシーケンスを分離する必要がある場合、またはシーケンスのシードを局所的に制御する必要がある場合は、のインスタンスを使用しますSystem.Random
。使い捨てやその他の影響のないシナリオのために迅速で汚いランダム値が必要な場合、Unityの単純化Random
はおそらく問題ありません。