Czas bez skalowania
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 36 z 60.
Wstrzymana lub spowolniona gra nadal potrzebuje zegara czasu rzeczywistego do pewnych rzeczy: animowanego menu pauzy, odliczania przed wznowieniem gry czy zamrożenia, które musi zakończyć się samo. Time.unscaledDeltaTime to rzeczywisty czas od poprzedniej klatki, niezależnie od wartości Time.timeScale, a Time.unscaledTime to rzeczywisty czas od uruchomienia gry. To menu pauzy obraca kółko ładowania w czasie rzeczywistym, więc kółko kręci się, gdy gra jest wstrzymana:
void Update()
{
wheel.Rotate(0f, 0f, -180f * Time.unscaledDeltaTime); // pół obrotu na sekundę, niezależnie od tego, czy gra jest wstrzymana
}Korutyny mają taką samą parę. WaitForSeconds odlicza czas gry, więc przy Time.timeScale = 0 nigdy się nie kończy; WaitForSecondsRealtime odlicza sekundy czasu rzeczywistego. Ta korutyna, uruchomiona po otwarciu menu, miga tytułem menu co pół sekundy:
IEnumerator Blink()
{
while (true)
{
title.SetActive(!title.activeSelf);
yield return new WaitForSecondsRealtime(0.5f);
}
}Używaj wartości skalowanych w rozgrywce, która powinna zatrzymać się wraz z grą, a nieskalowanych w przypadku elementów, które muszą działać podczas wstrzymania lub spowolnienia gry: menu, jego animacji oraz timerów kończących pauzę. Invoke nie ma wersji działającej w czasie rzeczywistym: zawsze odlicza czas gry.
Wyzwanie
ŚredniDodaj efekt zatrzymania po uderzeniu kowadła: cała gra na chwilę zastyga, gdy kowadło wyląduje.
- W pliku
Anvil.csnapiszIEnumerator HitStop():Time.timeScale = 0f;, następnieyield return new WaitForSecondsRealtime(freezeTime);, a potem ustaw z powrotem1f. - Napisz
void OnCollisionEnter(Collision collision), który wywołujeStartCoroutine(HitStop());.
Naciśnij „Graj” i zrzucaj kowadła, używając spacji: każde lądowanie zamrozi grę na 0.3 sekundy. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using System.Collections;
using UnityEngine;
public class Anvil : MonoBehaviour
{
public float freezeTime = 0.3f;
// Zatrzymaj grę na freezeTime sekund czasu rzeczywistego, gdy kowadło w coś uderzy
}
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski 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 bankuPoćwicz samodzielnie: Edytor online Unity