¿El generador de números aleatorios de Unity Engine es determinista en todas las plataformas y tiene la misma semilla inicial o debería implementar el mío?
Sé que ha habido algunas modificaciones al generador de números aleatorios recientemente.
Se agradecen las respuestas, no tengo los dispositivos disponibles para realizar ninguna prueba y todavía no he encontrado una declaración directa sobre el asunto.
unity
c#
random
cross-platform
eternalNoob
fuente
fuente
Respuestas:
Si bien no he tenido tiempo de hacer pruebas exhaustivas, la investigación inicial sugiere que el generador de números aleatorios utilizado es determinista en diferentes plataformas. La implementación exacta utilizada es: Unity PRNG . Ver también: Semilla aleatoria de Unity en hardware diferente .
Con la
Random
clase Unity , se puede guardar el estado exacto del PRNG, ver: Unity Random Sate .fuente
Thomas respondió la pregunta como se le preguntó. La pregunta más importante es la siguiente:
Existe una probabilidad bastante alta de que este sea el caso, pero eso no es lo mismo que una garantía. Entonces, la respuesta, desafortunadamente, es " no, no lo es ". Una garantía debería estar explícitamente establecida en la documentación de Random , pero actualmente no existe tal cosa.
Personalmente, incluso si hubiera una garantía de este tipo, recomendaría no confiar en ella; incluso con una garantía, todavía existe la posibilidad de que la implementación se cambie por accidente (un error), o simplemente sea desaprobada y luego eliminada. En algún momento, es posible que también desee reutilizar el generador fuera del marco de Unity. En lugar de confiar en Unity, simplemente copie un generador de números aleatorios que alguien más escribió (asegúrese de que pueda usar el código) y escriba una prueba para verificar que cumpla con sus requisitos de aleatoriedad.
fuente
Usando Unity 2017.2.0f3, UnityEngine.Random parece dar los mismos resultados en múltiples plataformas. Probado en Windows 10, macOS 10.12 Sierra y Android 7.
Para probar, recorté una clase de SeedFactory que he creado:
Y un MonoBehaviour para ejecutar la prueba:
Y los resultados han sido todos iguales:
fuente