Ist der Zufallszahlengenerator von Unity Engines bei gleichem Ausgangswert plattformübergreifend deterministisch, oder sollte ich meinen eigenen implementieren?
Ich weiß, dass in letzter Zeit einige Änderungen am Zufallszahlengenerator vorgenommen wurden.
Antworten sind erwünscht, ich habe keine Geräte zur Verfügung, um Tests durchzuführen, und ich habe noch keine direkte Aussage zu diesem Thema gefunden.
unity
c#
random
cross-platform
eternalNoob
quelle
quelle
Antworten:
Obwohl ich keine Zeit hatte, umfangreiche Tests durchzuführen, deuten erste Untersuchungen darauf hin, dass der verwendete Zufallszahlengenerator für verschiedene Plattformen deterministisch ist. Die genaue Implementierung lautet: Unity PRNG . Siehe auch: Unity Random Seed auf unterschiedlicher Hardware .
Mit der Unity-
Random
Klasse kann der genaue Status des PRNG gespeichert werden, siehe: Unity Random Sate .quelle
Thomas beantwortete die Frage wie gestellt. Die wichtigere Frage lautet wie folgt:
Es ist sehr wahrscheinlich, dass dies der Fall ist, aber dies ist nicht gleichbedeutend mit einer Garantie. Die Antwort lautet also leider " nein, das ist es nicht ". Eine Garantie müsste explizit in der Dokumentation von Random angegeben werden , aber derzeit gibt es keine solche.
Selbst wenn es eine solche Garantie geben würde, würde ich empfehlen, ihr nicht zu vertrauen - selbst bei einer Garantie besteht immer noch die Möglichkeit, dass die Implementierung versehentlich geändert wird (ein Fehler) oder einfach veraltet und später entfernt wird. Irgendwann möchten Sie den Generator möglicherweise auch außerhalb des Unity-Frameworks wiederverwenden. Anstatt sich auf Unity zu verlassen, kopieren Sie einfach einen Zufallszahlengenerator , den eine andere Person geschrieben hat (stellen Sie sicher, dass Sie den Code verwenden dürfen), und schreiben Sie einen Test, um zu überprüfen, ob er Ihren Anforderungen an die Zufälligkeit entspricht.
quelle
Bei Verwendung von Unity 2017.2.0f3 scheint UnityEngine.Random auf mehreren Plattformen die gleichen Ergebnisse zu liefern. Getestet unter Windows 10, macOS 10.12 Sierra und Android 7.
Zum Testen habe ich eine von mir erstellte SeedFactory-Klasse verkleinert:
Und ein MonoBehaviour, um den Test durchzuführen:
Und die Ergebnisse waren alle gleich:
quelle