Ingresa al modo de juego más rápido en Unity 2019.3

El modo de juego es la base de lo que hace que trabajar con Unity sea divertido. Pero a medida que sus proyectos se vuelven más complejos, puede llevar un tiempo comenzar. Cuanto más rápido pueda entrar y salir del modo de juego, más rápido podrá realizar y probar cambios. Es por eso que presentamos el modo de entrada al juego configurable en la versión beta de Unity 2019.3 como una función experimental.
Actualmente, cuando ingresa al modo de reproducción en el editor, Unity hace dos cosas: restablece los estados de scripting (recarga de dominio) y recarga la escena. Esto lleva tiempo y, cuanto más complejo sea tu proyecto, más tiempo tendrás que esperar para probar nuevos cambios en el Modo de reproducción. Sin embargo, a partir de la versión beta de Unity 2019.3, tendrás la opción de deshabilitar una o ambas de las acciones “Recargar dominio” y “Recargar escena”.
Según los resultados de nuestras pruebas, esto puede ahorrarle hasta un 50-90% del tiempo de espera, dependiendo de su proyecto.

Cuando habilita las opciones de Ingresar al modo de reproducción en Archivo > Configuración del proyecto > Editor, verá que las opciones para recargar el dominio y recargar la escena estarán disponibles. Consulta Cómo configurar el modo de reproducción en la documentación para obtener más detalles.

Estas opciones le permiten deshabilitar la recarga de dominio y/o escena desde el proceso de Ingresar al modo de reproducción cuando no hay cambios en el código. También puedes acceder a esta función a través de una API y una devolución de llamada si deseas restablecer el estado del juego antes de ingresar al modo de juego.
El diagrama a continuación muestra el proceso de ingreso al modo de reproducción antes y después de deshabilitar Recargar dominio y Recargar escena:

Consulte más detalles sobre los procesos que sigue Unity al ingresar al modo de reproducción en la documentación.
Tenga en cuenta que esta función actualmente es experimental y no todos los paquetes de Unity están validados para funcionar con la recarga de dominio y escena deshabilitadas. ¡Háganos saber en el foro si tiene algún problema!
Como puedes ver, evitar la recarga del dominio es muy sencillo, pero tiene un coste. Debe realizar ajustes en los campos estáticos y en los controladores de eventos estáticos en sus scripts para garantizar que los estados de sus scripts se restablezcan correctamente cuando se ingresa al Modo de reproducción.
El siguiente ejemplo de código tiene un contador que aumenta cuando el jugador presiona el botón Saltar. Cuando la recarga de dominio está habilitada, el contador se reinicia automáticamente a cero al ingresar al modo de juego. Después de deshabilitar la recarga de dominio, el contador no se reinicia; mantiene su valor dentro y fuera del modo de juego. Esto significa que en la segunda ejecución de su Proyecto en el Editor, el contador podría no estar en cero si cambió en la ejecución anterior.
clase pública StaticCounterExample: Monocomportamiento
{
//Este contador no se restablecerá a cero cuando la recarga de dominio esté deshabilitada
contador int estático = 0;
// La actualización se llama una vez por cuadro
vacío Actualizar()
{
if (Input.GetButtonDown("Jump"))
{
contador++;
Debug.Log("Contador: " + contador);
}
}
}
Utilice el atributo [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] y restablezca el valor explícitamente para asegurarse de que el contador se restablezca correctamente cuando la recarga de dominio esté deshabilitada. Ejemplo:
utilizando UnityEngine;
clase pública StaticCounterExampleFixed: Monocomportamiento
{
contador int estático = 0;
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
void estático Init()
{
Debug.Log("Reinicio del contador.");
contador = 0;
}
// La actualización se llama una vez por cuadro
vacío Actualizar()
{
if (Input.GetButtonDown("Jump"))
{
contador++;
Debug.Log("Contador: " + contador);
}
}
}
Después de haber deshabilitado la recarga de dominio, Unity no anulará el registro de los métodos de los controladores de eventos estáticos cuando salga del modo de reproducción. Esto puede generar complicaciones si tiene código que registra métodos con controladores de eventos estáticos. Por ejemplo, en la primera reproducción de su proyecto en el Editor, los métodos se registrarán de manera normal. Sin embargo, en la segunda ejecución de su proyecto, esos métodos se registrarán una segunda vez además de la primera y, por lo tanto, se llamarán dos veces cuando ocurra el evento.
El siguiente código registra un método con el controlador de eventos estático Application.quitting:
utilizando UnityEngine;
clase pública StaticEventExample: Monocomportamiento
{
vacío Inicio()
{
Debug.Log("Registrando función de salida");
Aplicacion.quitting += Salir;
}
void estático Salir()
{
Debug.Log("¡Saliendo!");
}
}
Cuando la recarga de dominio está deshabilitada, el ejemplo anterior agrega el método `Salir` nuevamente cada vez que ingresa al modo de reproducción. Esto genera un mensaje adicional de “Salir” cada vez que sales del modo de juego.
Utilice el atributo [RuntimeInitializeOnLoadMethod] y anule el registro del método explícitamente para que no se agregue dos veces:
utilizando UnityEngine;
clase pública StaticEventExampleFixed: Monocomportamiento
{
[RuntimeInitializeOnLoadMethod]
void estático RunOnStart()
{
Debug.Log("Anulando el registro de la función de salida");
Aplicacion.quitting -= Salir;
}
vacío Inicio()
{
Debug.Log("Registrando función de salida");
Aplicacion.quitting += Salir;
}
void estático Salir()
{
Debug.Log("Saliendo del reproductor");
}
}
Consulte más detalles sobre cómo modificar sus scripts para que funcionen correctamente cuando la recarga de dominio esté deshabilitada en nuestra documentación.
Nos gustaría asegurarnos de que los paquetes populares de Asset Store funcionen con la recarga de escena y dominio deshabilitados. Puedes ayudarnos informando a los editores de tus paquetes de activos sobre cualquier problema que encuentres en tus proyectos.
Creemos que si su proyecto actualmente tarda mucho en ingresar al modo de reproducción, esta función acelerará las cosas significativamente. Únase a la versión beta de Unity 2019.3 y pruébelo. ¡Esperamos escuchar lo que piensa en el foro! Dado que esta función es experimental, aún puedes ayudarnos a personalizarla para que se ajuste a tus necesidades. Esperamos especialmente conocer cualquier problema que pueda surgir.
Muchísimas gracias a los usuarios del foro @Sini, @chrisk, @Peter77 y @Baste, que ya han ayudado a toda la comunidad probando esta función y aportando comentarios invaluables.