Ölçeklenmemiş Zaman
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 36 / 60.
Duraklatılmış veya yavaşlatılmış bir oyun için bazı şeylerde hâlâ gerçek bir saate ihtiyaç vardır: animasyonlu bir duraklatma menüsü, oyun devam etmeden önceki bir geri sayım, kendiliğinden sona ermesi gereken bir dondurma. Time.unscaledDeltaTime, Time.timeScale ne olursa olsun son kareden bu yana geçen gerçek zamandır ve Time.unscaledTime ise oyunun başlamasından bu yana geçen gerçek zamandır. Bu duraklatma menüsü yükleme çarkını gerçek zamanla döndürür; böylece oyun duraklatılmışken de çark döner:
void Update()
{
wheel.Rotate(0f, 0f, -180f * Time.unscaledDeltaTime); // Duraklatılmış olsun ya da olmasın, saniyede yarım tur
}Coroutine'lerde de aynı ikili bulunur. WaitForSeconds oyun zamanını sayar; bu yüzden Time.timeScale = 0 olduğunda hiç sona ermez. WaitForSecondsRealtime ise gerçek saniyeleri sayar. Menü açıldığında başlatılan bu coroutine, menünün başlığını her yarım saniyede bir yanıp söndürür:
IEnumerator Blink()
{
while (true)
{
title.SetActive(!title.activeSelf);
yield return new WaitForSecondsRealtime(0.5f);
}
}Oyun durduğunda durması gereken oynanış için ölçeklendirilmiş değerleri, duraklatılmış veya yavaşlatılmışken çalışması gerekenler içinse ölçeklendirilmemiş değerleri kullan: menüler, animasyonları ve duraklatmayı sona erdiren zamanlayıcılar. Invoke'un gerçek zamanlı bir sürümü yoktur: her zaman oyun zamanını sayar.
Görev
OrtaÖrsün çarpma anında oyunu kısa süreliğine dondurmasını sağla: örs yere indiğinde tüm oyun bir anlığına donar.
Anvil.csiçindeIEnumerator HitStop()yaz:Time.timeScale = 0f;, ardındanyield return new WaitForSecondsRealtime(freezeTime);, sonra tekrar1folarak ayarla.StartCoroutine(HitStop());çağıranvoid OnCollisionEnter(Collision collision)yaz.
“Oyna” düğmesine bas ve Space tuşuyla örsleri bırak: her inişte oyun 0.3 saniye donar. Ardından “Kontrol et” düğmesine bas.
Kendin dene
using System.Collections;
using UnityEngine;
public class Anvil : MonoBehaviour
{
public float freezeTime = 0.3f;
// Örs bir şeye çarptığında oyunu freezeTime gerçek saniye boyunca dondur
}
Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi2Düğmeler ve Ekranlar
Düğmeler ve onClickLambda İfadeleriInspector'da Bağlantı KurmaPanelleri Açma ve KapamaCan ÇubuklarıTekrar: Yükseltme Mağazası5PlayerPrefs ile Kaydetme
Bir Sayı KaydetmeVarsayılan Değerle YüklemeEn Yüksek SkorAyarları KaydetmeTekrar: Bankadaki ParalarKendi başına pratik yap: Unity playground