Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio

Un 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
}
quiz iconPonte a prueba

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