Posso carregar dados em segundo plano enquanto a tela inicial do Unity está ativada? Se sim, como?
Estou tentando executar o código durante a tela inicial, não apenas carregar ativos.
Não consegui encontrar nenhuma informação sobre isso no Google ou na documentação da Unity .
Respostas:
Acabei de fazer alguns testes e descobri que o construtor de objetos na primeira cena é chamado enquanto a tela inicial ainda é exibida.
Aqui estão alguns horários que eu medi com um cronômetro estático:
Portanto, parece que podemos acionar um script para ser executado quase 3 segundos antes do final da tela inicial (com configurações padrão) acionando-o do construtor. Você pode tentar acionar seu código de carregamento (possivelmente em seu próprio segmento) a partir daí.
Apenas lembre-se de que isso provavelmente está sendo chamado a partir do thread de carregamento, portanto, como não estamos no thread principal, ficaremos um pouco mais limitados com o que podemos fazer aqui. Se há algo específico que você está tentando fazer que não é suportado no encadeamento de carregamento, considere postar uma nova pergunta com detalhes de seu aplicativo e podemos tentar encontrar uma solução alternativa para esse caso.
fonte
Update()
visto 2,9 segundos após o construtor ser acionado. É tudo o que consigo discernir com a instrumentação atual.Sua melhor aposta é criar sua própria tela de carregamento e definir isso como a cena inicial. Em seguida, a partir dessa cena simples, use o Scene Manager para carregar a próxima cena em segundo plano, de forma assíncrona .
Não consigo encontrar informações para confirmar isso, mas, pela minha observação, parece que o Unity está carregando sua cena inicial enquanto a tela inicial é exibida.
Em algumas plataformas, o jogo começa a rodar antes da tela inicial desaparecer, se o carregamento for rápido o suficiente.
Tudo isso pode mudar a qualquer momento, em qualquer plataforma, em qualquer atualização de versão. Não há garantia de que isso seja consistente, portanto é melhor usar sua própria tela de carregamento.
fonte
Resposta curta é não , você não pode fazer isso.
Ambas as respostas acima estão corretas em termos de gerenciamento de cenas. Você pode usar o Scene Manager para carregar a cena e, como é assíncrona, pode executar outro código em paralelo.
Consulte a documentação do SceneManager.LoadScene para obter mais detalhes.
O mais próximo que você pode conseguir de executar o seu código o mais rápido possível após o início do jogo é executá-lo desde a primeira cena com uma pegada minúscula. Vamos chamá-lo de cena inicial . A única coisa que ele conteria é sua imagem inicial e controlador executando o código necessário e carregando outra cena.
Como possui uma área de ocupação reduzida, ele carrega muito rápido e, portanto, faz com que seu código seja executado quase instantaneamente. Você pode fazer o que tem que fazer e carregar outra cena depois.
Outra coisa que você pode tentar é remover a "tela inicial", remover as imagens que você deseja exibir lá. Será um pouco mais rápido, pois não será carregado inicialmente.
Portanto, o fluxo seria algo como isto:
Quanto menor a cena, mais rápido será o carregamento. Você pode usar algo como o controlador de respingo anexado a qualquer objeto na tela inicial carregada .
fonte