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.
Wyzwanie
ŚredniKomet 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
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w banku