Consejo rápido pausa, cámara lenta y doble tiempo en la unidad

Pausar un juego de Unity es fácil. Hay algunas cosas que debe tener en cuenta, pero llegaremos a ellas al final de este consejo. Vamos a agregar unos pocos botones GUI simples para controlar el tiempo dentro de un proyecto básico de Unity.


Vista previa del resultado final

Echemos un vistazo al resultado final en el que trabajaremos:


Paso 1: Crear un nuevo proyecto

Empecemos por abrir Unity y crear un nuevo proyecto. Es posible que desee agregar alguna animación o algún tipo de acción a los procedimientos, para que pueda ver un efecto cuando presionamos los botones. En el ejemplo proporcionado, acabo de hacer unos simples cubos giratorios.

Abrir un nuevo proyecto es agradable y simple. Una vez que Unity haya terminado de cargarse, si lo tiene configurado para mostrar el Asistente de proyectos, puede hacer clic en la pestaña "Crear nuevo proyecto" e ingresar un nombre de archivo. La unidad se hará cargo del resto. Si la ventana del Asistente de proyecto no aparece cuando inicia Unity, vaya a Archivo> Nuevo proyecto.


Paso 2: Crear una nueva secuencia de comandos de JavaScript

Unity tiene su propio sistema GUI integrado, que va mucho más allá de esta sugerencia. Digamos que todo lo que sucede en GUI sucede en una función llamada Ongui y la clase GUI proporciona un montón de cosas geniales, como un botón.

Continúe y cree un nuevo script a través del menú Activos - seleccione Activos> Crear> JavaScript:

Tu nuevo script debería aparecer en la ventana del Proyecto. Haga clic una vez en el script y se debe resaltar para que pueda cambiarle el nombre. Nombra el script "PauseScript" y pulsa enter. Ahora queremos comenzar a codificar, así que adelante, haga doble clic esta vez. Eso debería abrir el editor de scripts predeterminado con la plantilla / código predeterminado de Unity ya incluido. Una vez que se haya cargado el editor de scripts, elimine el código predeterminado y reemplácelo con el siguiente código:

 función OnGUI () // muestra un botón de 'pausa' si (GUI. Botón (Rect (0,0,120,30), "TOGGLE PAUSE")) // llame a nuestra función de alternar doPauseToggle (); 

GUI. Botón requiere un Rect (que contiene la x, y, el ancho y la altura de nuestro botón) y la cadena para mostrar dentro de él. Descubrir si se ha pulsado o no el botón es tan simple como poner nuestro GUI. Botón dibujar método en una instrucción if.


Paso 3: Codificación de la función de alternancia de pausa

Aquí, nos referimos a una función que vamos a llamar doPauseToggle (). Esta será una función simple que verifica si estamos en pausa o sin pausa, y luego realiza la acción correcta. Agregue el siguiente código al final de su secuencia de comandos PauseScript.js, debajo de la función OnGUI que agregamos en el Paso 2:

 function doPauseToggle () // aquí verificamos si estamos ejecutando en una escala de tiempo superior a 0 si (Time.timeScale> 0) // la escala de tiempo está por encima de cero, por lo que necesitamos pausar el juego aquí pauseGame () ;  else // la escala de tiempo fue menor que cero, por lo que desempaquetamos el juego aquí unPauseGame (); 

Time.timeScale Es así como nos ocupamos de pausar el juego. Esencialmente, cambiamos la escala a la que pasa el tiempo. Cuando timeScale es 1.0, el tiempo es en tiempo real. En cero (0), el tiempo está pausado. Así que en nuestro doPauseToggle función, simplemente verificamos si el tiempo es mayor que cero, sin pausa, si así lo llamamos un nuevo pauseGame () función. De lo contrario, se llama unPauseGame ().


Paso 4: Codificación de las funciones de pausa y no pausa

Las funciones en el paso 3, pauseGame () y unPauseGame (), simplemente manipular el Time.timeScale el valor es 0 o 1. Agregue el siguiente código al final de su secuencia de comandos PauseScript.js, debajo del código que agregamos en el Paso 3:

 function pauseGame () // establece la escala en la que el tiempo pasa a 0, tiempo de congelación (!) Time.timeScale = 0;  function unPauseGame () // establece la escala en la que el tiempo pasa a 1, ejecutándose en tiempo real otra vez Time.timeScale = 1; 

Lo creas o no, eso es todo lo que necesitamos hacer para agregar un botón de pausa a un archivo de Unity. Si tienes algo de acción en tu escena de Unity, ¡verás que se detiene y se detiene cada vez que hacemos clic en el botón! Ten en cuenta que si no tienes nada en tu escena, no verás que pase nada cuando toques el juego..


Paso 5: Moverse en cámara lenta

¿Estás pensando lo que estoy pensando? Si 0 hace una pausa y 1 lo hace funcionar, ¿qué hay de 0.5? Pensar en el momento!

Primero, sigamos adelante y agreguemos un nuevo botón a nuestro OnGUI () función. Colóquelo en la parte inferior de la función, justo encima del cierre. abrazadera.

 // muestra un botón 'slowmo' si (GUI. Botón (Rect (0,30,80,30), "SLOWMO")) // llame a nuestra función de conmutación slowMo (); 

Ahora necesitamos una nueva función para ajustar el factor de tiempo a menos de 1. Desplácese hasta la parte inferior de su secuencia de comandos PauseScript.js y agregue esta nueva función:

 function slowMo () // establece la escala en la que el tiempo 5asses a 0.1, ejecutándose en slowmo Time.timeScale = 0.1; 

? demostrando así que no tienes que ser Neo por tiempo de bala en Unity!


Paso 6: Doble tiempo!

Finalmente, por diversión, hagamos que todo se vuelva un poco loco jugando al doble. Aunque no he visto esto usado en una mecánica de juego real, he visto escalar el tiempo temporalmente para poner en marcha un efecto de partícula - fue un efecto de fuego y el autor quería que la pantalla se llenara de fuego rápidamente para traer el fondo De su pantalla de menú a la vida. Él aumentó el tiempo en lo alto durante un segundo después de que se cargó el menú y el fuego llenó la pantalla. Luego redujo el tiempo a 1 para que las llamas se movieran correctamente y todo lo demás en el juego estuviera a velocidad normal..

Para agregar el doble de tiempo, seguiremos el mismo procedimiento que en el Paso 5, agregando un nuevo botón que llamará a una nueva función. La nueva función simplemente establecerá nuestra escala de tiempo en 2. Encuentre el OnGUI () Funcione en su secuencia de comandos PauseScript.js y agregue lo siguiente, arriba del final de la función y encima del cierre corsé.

 // muestra un botón de 'tiempo doble' si (GUI. Botón (Rect (0,60,120,30), "DOBLE TIEMPO")) // llame a nuestra función de conmutación doubleTime (); 

Derecha. Tenemos un botón, vamos a agregar esa función doubleTime ():

 function doubleTime () // establece la escala en la que el tiempo pasa a 0.5, ejecutándose en slowmo Time.timeScale = 2; 

Para divertirse, intente ajustar la escala de tiempo hasta 100 y vea qué sucede.


Vamos a hacer un balance de nuestro guión. Aquí está el PauseScript.js completo, en caso de que algo malo sucediera en el camino:

 función OnGUI () // muestra un botón de 'pausa' si (GUI. Botón (Rect (0,0,120,30), "TOGGLE PAUSE")) // llame a nuestra función de alternar doPauseToggle ();  // muestra un botón 'slowmo' si (GUI. Botón (Rect (0,30,80,30), "SLOWMO")) // llama a nuestra función de conmutación slowMo ();  // muestra un botón de 'tiempo doble' si (GUI. Botón (Rect (0,60,120,30), "DOBLE TIEMPO")) // llame a nuestra función de conmutación doubleTime ();  función doPauseToggle () // aquí verificamos si estamos ejecutando en una escala de tiempo superior a 0 si (Time.timeScale> 0) // la escala de tiempo es superior a cero, por lo que debemos pausar el juego aquí pauseGame ();  else // la escala de tiempo fue menor que cero, por lo que desempaquetamos el juego aquí unPauseGame ();  function pauseGame () // establece la escala en la que el tiempo pasa a 0, tiempo de congelación (!) Time.timeScale = 0;  function unPauseGame () // establece la escala en la que el tiempo pasa a 1, ejecutándose en tiempo real otra vez Time.timeScale = 1;  function slowMo () // establece la escala en la que el tiempo pasa a 0.1, ejecutándose en slowmo Time.timeScale = 0.1;  function doubleTime () // establece la escala en la que el tiempo pasa a 0.5, ejecutándose en slowmo Time.timeScale = 2; 

Palabras finales y un par de gotchas!

Es importante tener en cuenta que Time.timeScale no afectará el código dentro de un Actualizar() función. La actualización se lleva a cabo cada "tick" y ocurre fuera de la escala de tiempo, por lo que si necesita que suceda algo a medida que el juego está en pausa, como una animación de fondo, lo más probable es que el lugar para colocarlo sea la Actualización. Consulte la documentación de Unity para obtener más información sobre este.

Tenga en cuenta que si cambia el Time.timeScale El valor también afectará a cualquier acción relacionada con el tiempo, como las llamadas a la función Invocar o cualquier temporizador que use valores de Time.time. Si su juego se ejecuta al doble de la velocidad, tendrá que reducir a la mitad la velocidad de sus acciones basadas en el tiempo (por ejemplo, si tiene un juego de carreras con un temporizador de vuelta y su Time.timeScale se establece en 2.0, deberá ralentizar el temporizador de vuelta a la mitad para que mida el tiempo con precisión).

Las reacciones físicas no se ven afectadas directamente, por lo que su juego debería ejecutarse como lo haría normalmente en colisiones y en términos físicos, solo en una escala de tiempo diferente.

¡Eso es! Gracias por leer mi consejo rápido. Jugar con Time.timeScale y espero ver efectos de Matrix geniales en tus proyectos. Divertirse, hacer juegos.!