Cámara lenta
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 34 de 56.
Un Time.timeScale entre 0 y 1 produce cámara lenta. Con 0.25, Time.deltaTime es un cuarto del tiempo real de cada fotograma, así que un coche movido mediante speed * Time.deltaTime recorre un cuarto de la distancia cada segundo real, los cuerpos rígidos vuelan y caen a un cuarto de su velocidad, y WaitForSeconds(1f) dura 4 segundos reales. Por encima de 1, el juego se ejecuta más rápido: 2 es el doble de velocidad.
La física necesita una línea más. Cada paso de física sigue avanzando el juego en Time.fixedDeltaTime, 0.02 segundos de tiempo de juego, y con 0.25 esos pasos duran 0.08 segundos reales: FixedUpdate() se ejecuta solo 12.5 veces por segundo real, así que los cuerpos se mueven un fotograma de cada cinco y dan tirones. Reduce el paso por el mismo factor y luego restaura ambos valores, ya que Unity nunca restablece fixedDeltaTime por sí solo. Este script ralentiza el juego mientras se mantiene pulsada la barra espaciadora:
float normalStep;
void Awake()
{
normalStep = Time.fixedDeltaTime; // 0.02 en un proyecto nuevo
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Time.timeScale = 0.25f;
Time.fixedDeltaTime = normalStep * Time.timeScale;
}
if (Input.GetKeyUp(KeyCode.Space))
{
Time.timeScale = 1f;
Time.fixedDeltaTime = normalStep;
}
}Con el paso más pequeño, la física sigue avanzando 50 veces por segundo real y cada paso abarca un cuarto del tiempo de juego, así que la cámara lenta se mantiene fluida. El paso se mide en segundos de juego, por lo que el código de FixedUpdate() que usa Time.deltaTime sigue funcionando sin cambios.
Desafío
IntermedioUn cometa cruza el cielo, y Space lo lanza desde la izquierda (Launcher.cs, listo). En su recorrido atraviesa la SlowZone, una caja de activación, y esa parte de su vuelo debería reproducirse a cámara lenta. Escribe SlowZone.cs:
- Cuando algo entra en la zona, el tiempo del juego transcurre a
slowScale(0.4 en el Inspector), y el paso de física se reduce por el mismo factor a partir de 0.02, para que el cometa siga moviéndose con fluidez. - Cuando sale de la zona, el tiempo vuelve a transcurrir a velocidad normal, y el paso de física vuelve a 0.02.
Pulsa Play, pulsa Space y observa cómo pasa el cometa; después, pulsa Check.
Pruébalo tú mismo
using UnityEngine;
public class SlowZone : MonoBehaviour
{
public float slowScale = 0.4f;
// Cámara lenta mientras algo esté dentro de la zona
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: corredor infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada