Возможно, наиболее важным отличием является то, что Unity Random.Range
немного проще в использовании, будучи статичным. Библиотека базовых классов C # System.Random
, однако, предлагает вам больше контроля и изоляции.
Возможно, что они также используют различные скрытые реализации (хотя я предполагаю, что Unity Random
просто реализован с точки зрения системы Random
), но это, вероятно, не вызывает особого беспокойства. По существу , они оба вероятно один и тот же тип генератора случайных чисел: генератор псевдослучайной , основанный на переборе последовательность , определенную некоторым семени).
Проблема управления более актуальна, потому что в некоторых случаях вы можете использовать разные случайные потоки для разных целей. Например, в контексте сетевого взаимодействия на уровне блокировки вы можете захотеть исправить начальное число, используемое для генерации случайных событий, влияющих на игровой процесс, для всех игроков в игре, но вы можете не заботиться о потоке случайных чисел, используемых для чисто визуальные события и могут позволить этому потоку быть просеянным более традиционным способом (например, с временем безотказной работы системы при запуске игры).
Точно так же, если вы собираетесь генерировать случайные числа в нескольких потоках, вы можете использовать отдельные случайные объекты для каждого потока, чтобы предотвратить условия гонки. Это может произойти, если ваша игровая логика работает во многих потоках, и у вас, например, также есть система воспроизведения игрового процесса.
В конце концов, не обязательно лучше использовать один или другой в целом, скорее есть плюсы и минусы. Если вам нужно изолировать последовательность чисел от других возможных случайных последовательностей, или когда вам нужен локализованный контроль над начальным числом последовательности, используйте экземпляр System.Random
. Если вам просто нужно быстрое и грязное случайное значение для одноразового использования или какого-либо другого безрезультатного сценария, упрощенный Unity, Random
вероятно, подойдет.