O que você está procurando?
Engine & platform

Entre no Modo de Reprodução mais rápido no Unity 2019.3

ALEXEY ZAKHAROV / UNITY TECHNOLOGIESContributor
Nov 5, 2019|5 Min
Entre no Modo de Reprodução mais rápido no Unity 2019.3
Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

O Modo de Jogo é o que torna o Unity divertido de se trabalhar. Mas à medida que seus projetos se tornam mais complexos, pode levar um tempo para começar. Quanto mais rápido você entrar e sair do Modo de Reprodução, mais rápido poderá fazer e testar alterações. É por isso que estamos introduzindo o Modo de Entrada de Jogo Configurável no Unity 2019.3 beta como um recurso experimental.

Atualmente, quando você entra no Modo de Reprodução no Editor, o Unity faz duas coisas: redefine os estados de script (Recarregamento de Domínio) e recarrega a Cena. Isso leva tempo e, quanto mais complexo seu projeto se torna, mais tempo você precisa esperar para testar novas mudanças no Modo de Reprodução. No entanto, a partir do Unity 2019.3 beta, você terá a opção de desabilitar uma ou ambas as ações "Recarregar domínio" e "Recarregar cena".

Com base nos resultados dos nossos testes, isso pode economizar de 50% a 90% do tempo de espera, dependendo do seu projeto.

Imagem

Ao habilitar Entrar nas Opções do Modo de Reprodução em Arquivo > Configurações do Projeto > Editor, você verá que as opções para recarregar Domínio e Recarregar Cena ficam disponíveis. Confira Como configurar o Modo de Reprodução na documentação para mais detalhes.

Imagem

Essas opções permitem que você desabilite o recarregamento de domínio e/ou cena no processo Entrar no Modo de Reprodução quando não há alterações de código. Você também pode acessar esse recurso por meio de uma API e um retorno de chamada se quiser redefinir o estado do jogo antes de entrar no Modo de Jogo.

O diagrama abaixo mostra o processo Enter Play Mode antes e depois de desabilitar Reload Domain e Reload Scene:

Imagem

Veja mais detalhes sobre os processos pelos quais o Unity passa ao entrar no Modo de Reprodução na documentação.

Observe que esse recurso é experimental no momento e nem todos os pacotes do Unity são validados para funcionar com o Domain e o Scene Reloading desabilitados. Por favor, avise-nos no fórum se tiver algum problema!

Como modificar seus scripts corretamente quando você desabilitou o Domain Reload

Como você pode ver, evitar a recarga de domínio é muito simples, mas tem um custo. Você precisa fazer ajustes em campos estáticos e manipuladores de eventos estáticos em seus scripts para garantir que os estados de script sejam redefinidos corretamente quando o Modo de Reprodução for acessado.

O exemplo de código a seguir tem um contador que aumenta quando o jogador pressiona o botão Pular. Quando o Recarregamento de Domínio está habilitado, o contador é zerado automaticamente ao entrar no Modo de Reprodução. Depois de desabilitar o Recarregamento de Domínio, o contador não é zerado; ele mantém seu valor dentro e fora do Modo de Reprodução. Isso significa que na segunda execução do seu Projeto no Editor, o contador pode não estar em zero se ele tiver mudado na execução anterior.

classe pública StaticCounterExample: MonoComportamento
{
//este contador não será zerado quando o Domain Reloading estiver desabilitado
contador estático int = 0;

// A atualização é chamada uma vez por quadro
Atualização vazia()
{
if (Input.GetButtonDown("Jump"))
{
contador++;
Debug.Log("Contador: " + contador);
}
}
}

Use o atributo [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] e redefina o valor explicitamente para garantir que o contador seja redefinido corretamente quando o Recarregamento de Domínio estiver desabilitado. Exemplo:

using UnityEngine;

classe pública StaticCounterExampleFixed: MonoComportamento
{
contador estático int = 0;

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
estático void Init()
{
Debug.Log("Reinicialização do contador.");
contador = 0;
}

// A atualização é chamada uma vez por quadro
Atualização vazia()
{
if (Input.GetButtonDown("Jump"))
{
contador++;
Debug.Log("Contador: " + contador);
}
}
}

Depois de desabilitar o Recarregamento de Domínio, o Unity não cancelará o registro de métodos de manipuladores de eventos estáticos quando você sair do Modo de Reprodução. Isso pode levar a complicações se você tiver um código que registra métodos com manipuladores de eventos estáticos. Por exemplo, na primeira reprodução do seu projeto no Editor, os métodos seriam registrados normalmente. Entretanto, no segundo Play do seu projeto, esses métodos seriam registrados uma segunda vez, além da primeira, e, portanto, seriam chamados duas vezes quando o evento ocorresse.

O código a seguir registra um método com o manipulador de eventos estático Application.quitting:

using UnityEngine;
classe pública StaticEventExample: MonoComportamento
{
void Start()
{
Debug.Log("Registrando função quit");
Aplicação.quitting += Sair;
}

estático vazio Sair()
{
Debug.Log("Quitting!");
}
}

Quando o Recarregamento de Domínio está desabilitado, o exemplo acima adiciona o método `Quit` novamente toda vez que você entra no Modo de Reprodução. Isso resulta em uma mensagem adicional de “Sair” toda vez que você sai do Modo de Reprodução.

Use o atributo [RuntimeInitializeOnLoadMethod] e cancele o registro do método explicitamente para que ele não seja adicionado duas vezes:

using UnityEngine;
classe pública StaticEventExampleFixed: MonoComportamento
{
[RuntimeInitializeOnLoadMethod]
static void RunOnStart()
{
Debug.Log("Cancelando registro da função sair");
Application.quitting -= Quit;
}

void Start()
{
Debug.Log("Registrando função quit");
Aplicação.quitting += Sair;
}

estático vazio Sair()
{
Debug.Log("Fechando o Player");
}
}

Veja mais detalhes sobre como modificar seus scripts para que funcionem corretamente quando o Domain Reload estiver desabilitado em nossa documentação.

Asset Store

Gostaríamos de garantir que os pacotes populares da Asset Store funcionem com o Domain e o Scene Reloading desabilitados. Você pode nos ajudar relatando quaisquer problemas que encontrar em seus projetos aos editores de seus pacotes de ativos.

Participe do Unity 2019.3 beta!

Acreditamos que se o seu projeto estiver lento para entrar no Modo de Reprodução, esse recurso irá acelerar as coisas significativamente. Participe do Unity 2019.3 beta e experimente. Estamos ansiosos para saber o que você acha no fórum! Como esse recurso é experimental, você ainda pode nos ajudar a adaptá-lo às suas necessidades. Estamos especialmente ansiosos para ouvir sobre quaisquer problemas que você encontrar.

Um grande agradecimento aos usuários do fórum @Sini, @chrisk, @Peter77 e @Baste que já ajudaram toda a comunidade testando esse recurso e fornecendo feedback inestimável.