Czy generatory liczb losowych w silnikach jedności są deterministyczne na różnych platformach z tym samym początkowym początkiem, czy powinienem wdrożyć własny?
Wiem, że ostatnio wprowadzono pewne modyfikacje generatora liczb losowych.
Odpowiedzi są mile widziane, nie mam pod ręką żadnych urządzeń, aby wykonać jakiekolwiek testy i nie znalazłem jeszcze bezpośredniego oświadczenia w tej sprawie.
unity
c#
random
cross-platform
eternalNoob
źródło
źródło
Odpowiedzi:
Chociaż nie miałem czasu na żadne obszerne testy, wstępne badania sugerują, że zastosowany generator liczb losowych jest deterministyczny na różnych platformach. Zastosowana dokładna implementacja to: Unity PRNG . Zobacz także: Unity Random Seed On Different Hardware .
Dzięki
Random
klasie Unity można zapisać dokładny stan PRNG, patrz: Losowe dane Unity .źródło
Thomas odpowiedział na zadane pytanie. Ważniejsze pytanie jest następujące:
Prawdopodobieństwo takiego zachowania jest raczej wysokie, ale nie jest to równoznaczne z gwarancją. Zatem odpowiedź brzmi „ nie, nie jest ”. Gwarancja musi być wyraźnie określona w dokumentacji Random , ale obecnie nie ma czegoś takiego.
Osobiście, nawet gdyby istniała taka gwarancja, odradzam jej zaufanie - nawet z gwarancją nadal istnieje szansa, że implementacja zostanie zmieniona przypadkowo (błąd) lub po prostu przestarzała, a następnie usunięta. W pewnym momencie możesz również chcieć ponownie użyć generatora poza środowiskiem Unity. Zamiast polegać na Unity, po prostu skopiuj generator liczb losowych , który napisał ktoś inny (upewnij się, że możesz używać kodu) i napisz test, aby sprawdzić, czy spełnia on twoje wymagania dotyczące losowości.
źródło
Używając Unity 2017.2.0f3, UnityEngine.Random wydaje się dawać takie same wyniki na wielu platformach. Testowany na Windows 10, macOS 10.12 Sierra i Android 7.
Aby przetestować, ograniczyłem utworzoną przeze mnie klasę SeedFactory:
I MonoBehaviour do uruchomienia testu:
Wszystkie wyniki były takie same:
źródło