Menu
CoddyTech

Zwolnione tempo

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 34 z 56.

Time.timeScale o wartości między 0 a 1 oznacza zwolnione tempo. Przy wartości 0.25 Time.deltaTime wynosi jedną czwartą rzeczywistego czasu klatki, więc samochód poruszający się z użyciem speed * Time.deltaTime pokonuje w każdej rzeczywistej sekundzie jedną czwartą swojej drogi, obiekty Rigidbody lecą i spadają z jedną czwartą swojej prędkości, a WaitForSeconds(1f) trwa 4 rzeczywiste sekundy. Powyżej 1 gra działa szybciej: 2 oznacza dwukrotną prędkość.

Fizyka wymaga jeszcze jednej linijki. Każdy krok fizyki nadal przesuwa grę o Time.fixedDeltaTime, czyli 0.02 sekundy czasu gry, a przy wartości 0.25 trwa to 0.08 rzeczywistej sekundy: FixedUpdate() uruchamia się tylko 12.5 razy na rzeczywistą sekundę, więc obiekty poruszają się raz na pięć klatek i ruch jest szarpany. Zmniejsz krok o ten sam współczynnik i później przywróć obie wartości, ponieważ Unity nigdy samo nie resetuje fixedDeltaTime. Ten skrypt spowalnia grę, gdy przytrzymujesz Spację:

float normalStep;

void Awake()
{
    normalStep = Time.fixedDeltaTime;   // 0.02 w nowym projekcie
}

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;
    }
}

Przy mniejszym kroku fizyka nadal wykonuje 50 kroków na rzeczywistą sekundę, a każdy krok obejmuje jedną czwartą czasu gry, dzięki czemu zwolnione tempo pozostaje płynne. Krok jest wyrażony w sekundach czasu gry, więc kod w FixedUpdate(), który używa Time.deltaTime, nadal działa bez zmian.

challenge icon

Wyzwanie

Średni

Komet przecina niebo, a Space wystrzeliwuje go z lewej strony (Launcher.cs, gotowe). Po drodze przelatuje przez SlowZone, obszar wyzwalacza, a ten fragment lotu powinien odbywać się w zwolnionym tempie. Napisz SlowZone.cs:

  • Gdy coś wchodzi do strefy, czas w grze płynie z prędkością slowScale (0.4 w Inspectorze), a krok fizyki zmniejsza się o ten sam współczynnik z 0.02, dzięki czemu komet nadal porusza się płynnie.
  • Gdy opuszcza strefę, czas znów płynie z normalną prędkością, a krok fizyki wraca do 0.02.

Naciśnij Play, naciśnij spację i obserwuj, jak kometa przelatuje przez strefę, a następnie kliknij Check.

Spróbuj swoich sił

using UnityEngine;

public class SlowZone : MonoBehaviour
{
    public float slowScale = 0.4f;

    // Spowolnienie ruchu, gdy coś znajduje się w strefie
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier