Prawdopodobnie najważniejszą różnicą jest to, że Unity Random.Range
jest nieco łatwiejszy w użyciu, ponieważ jest statyczny. Biblioteka klasy C # System.Random
zapewnia jednak większą kontrolę i izolację.
Możliwe, że używają również różnych implementacji pod maską (chociaż domyślam się, że Unity Random
jest właśnie zaimplementowane pod względem systemu Random
), ale prawdopodobnie nie jest to znaczący problem. Zasadniczo oba są prawdopodobnie tym samym rodzajem generatora liczb losowych: pseudolosowym generatorem opartym na iteracji sekwencji określonej przez niektóre nasiona.
Problem kontroli jest bardziej odpowiedni, ponieważ w niektórych kontekstach możesz chcieć użyć różnych losowych strumieni do różnych rzeczy. Na przykład, w kontekście sieciowej fazy blokowania, możesz chcieć naprawić ziarno używane do generowania losowych zdarzeń mających wpływ na rozgrywkę u wszystkich graczy w grze, ale możesz nie przejmować się tak bardzo strumieniem liczb losowych używanych wyłącznie wydarzenia wizualne i mogą pozwolić na rozsiewanie tego strumienia w bardziej tradycyjny sposób (na przykład z czasem działania systemu przy uruchomieniu gry).
Podobnie, jeśli zamierzasz generować losowe liczby w wielu wątkach, możesz chcieć użyć różnych losowych obiektów dla każdego wątku, aby zapobiec warunkom wyścigu. Może się to zdarzyć, jeśli logika gry przebiega przez wiele wątków, a na przykład masz również system rozgrywki.
W końcu niekoniecznie lepiej jest używać jednego lub drugiego ogólnie, ale są plusy i minusy. Jeśli potrzebujesz odizolować sekwencję liczb od innych potencjalnych losowych sekwencji, które mogą się zdarzyć, lub gdy potrzebujesz zlokalizowanej kontroli nad ziarnem sekwencji, użyj instancji System.Random
. Jeśli potrzebujesz tylko szybkiej i brudnej losowej wartości do użycia na wyrzuceniu lub w innym nie wpływającym na scenariusz scenariuszu, uproszczone Unity Random
jest prawdopodobnie w porządku.