La différence la plus importante est sans doute que l'Unity Random.Range
est légèrement plus facile à utiliser, étant statique. System.Random
Cependant, la bibliothèque de classes de base C # vous offre plus de contrôle et d'isolement.
Il est possible qu'ils utilisent également différentes implémentations sous le capot (bien que je suppose que l'Unity Random
est simplement implémenté en termes de système Random
), mais ce n'est probablement pas une préoccupation notable. Fondamentalement, ils sont probablement tous deux le même type de générateur de nombres aléatoires: un générateur pseudo-aléatoire basé sur l'itération d'une séquence définie par une graine).
Le problème de contrôle est plus pertinent, car dans certains contextes, vous souhaiterez peut-être utiliser différents flux aléatoires pour différentes choses. Par exemple, dans un contexte de mise en réseau de mise en réseau à étape de verrouillage, vous souhaiterez peut-être corriger la graine utilisée pour générer des événements aléatoires affectant le gameplay sur tous les joueurs du jeu, mais vous ne vous souciez peut-être pas tant du flux de nombres aléatoires utilisé uniquement pour les événements visuels et peuvent permettre à ce flux d'être semé d'une manière plus traditionnelle (avec la disponibilité du système au lancement du jeu, par exemple).
De même, si vous allez générer des nombres aléatoires dans plusieurs threads, vous souhaiterez peut-être utiliser des objets aléatoires distincts pour chaque thread afin d'éviter les conditions de concurrence. Cela peut arriver si votre logique de jeu traverse de nombreux threads et que vous avez également un système de rejeu de jeu, par exemple.
Au final, il n'est pas forcément préférable d'utiliser l'un ou l'autre en général, il y a plutôt des avantages et des inconvénients. Lorsque vous devez isoler la séquence de nombres des autres séquences aléatoires potentielles qui peuvent se produire, ou lorsque vous avez besoin d'un contrôle localisé sur la graine de la séquence, utilisez une instance de System.Random
. Si vous avez juste besoin d'une valeur aléatoire rapide et sale pour une utilisation jetable ou un autre scénario sans impact, la simplification d'Unity Random
est probablement très bien.