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:
- Tela inicial (sem imagem aqui, apenas deixe-a preta)
- Cena inicial (tamanho reduzido com o seu código inicial e o próximo carregador de cena)
- Cena de introdução (cena de introdução regular)
- .... (outras cenas, como de costume)
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 .
using UnityEngine;
using UnityEngine.SceneManagement;
public class SplashController: MonoBehaviour
{
void Start()
{
// RunSomeSyncMethod();
SceneManager.LoadScene("OtherSceneName", LoadSceneMode.Additive);
}
}