O gerador de número aleatório dos mecanismos de unidade é determinístico nas plataformas, com a mesma semente inicial ou devo implementar o meu?
Eu sei que houve algumas modificações no gerador de números aleatórios recentemente.
As respostas são bem-vindas, não tenho os dispositivos disponíveis para realizar nenhum teste e ainda não encontrei uma declaração direta sobre o assunto.
unity
c#
random
cross-platform
eternalNoob
fonte
fonte
Respostas:
Embora eu não tenha tido tempo de fazer testes extensivos, a pesquisa inicial sugere que o gerador de números aleatórios usado é determinístico em diferentes plataformas. A implementação exata usada é: Unity PRNG . Veja também: Semente aleatória Unity em hardware diferente .
Com a
Random
classe Unity , o estado exato do PRNG pode ser salvo, consulte: Unity Random Sate .fonte
Thomas respondeu à pergunta como solicitado. A questão mais importante é a seguinte:
Existe uma probabilidade bastante alta de que isso aconteça, mas isso não é o mesmo que uma garantia. Então a resposta, infelizmente, é " não, não é ". Uma garantia precisaria ser explicitamente declarada na documentação da Random , mas atualmente não existe.
Pessoalmente, mesmo se houvesse essa garantia, eu recomendaria não confiar nela - mesmo com uma garantia, ainda há uma chance de a implementação ser alterada por acidente (um bug) ou simplesmente ser preterida e removida posteriormente. Em algum momento, você também pode querer reutilizar o gerador fora da estrutura do Unity. Em vez de confiar no Unity, basta copiar um gerador de números aleatórios que alguém escreveu (verifique se você tem permissão para usar o código) e escreva um teste para verificar se ele atende aos seus requisitos de aleatoriedade.
fonte
Usando o Unity 2017.2.0f3, o UnityEngine.Random parece fornecer os mesmos resultados em várias plataformas. Testado no Windows 10, macOS 10.12 Sierra e Android 7.
Para testar, reduzi a classe SeedFactory que criei:
E um MonoBehaviour para executar o teste:
E os resultados foram os mesmos:
fonte