Ölçeklenmemiş Zaman
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 35 / 56.
Duraklatılmış veya yavaşlatılmış bir oyun, bazı şeyler için yine de gerçek bir saate ihtiyaç duyar: animasyonlu bir duraklatma menüsü, oyun devam etmeden önce bir geri sayım, kendi kendine 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 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ıldığında da çark dönmeye devam eder:
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 nedenle Time.timeScale = 0 olduğunda hiç bitmez; 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 oyun mekaniği için ölçeklenmiş değerleri; duraklatıldığında veya yavaşlatıldığında çalışması gerekenler içinse ölçeklenmemiş değerleri kullan: menüler, animasyonları ve duraklatmayı sona erdiren sayaçlar. Invoke için gerçek zamanlı bir sürüm yoktur: her zaman oyun zamanını sayar.
Görev
OrtaBir vuruş durması, güçlü bir darbeyi ağır hissettirir: çarpma anında tüm oyun kısa bir süre donar. Ok tuşları düşürücüyü hareket ettirir ve Space, ondan bir örs düşürür (Dropper.cs hazır). Her örsün taşıdığı Anvil.cs dosyasını yaz:
- Örs herhangi bir şeye çarptığında oyunu dondur:
Time.timeScaledeğerini 0 yap. freezeTimegerçek saniye sonra (Inspector'da 0.3), değeri tekrar 1 yap.
Play'e bas, birkaç örs düşür, ardından Check'e 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
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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östergesi4Sahneler ve Bölümler
Bir Sahne YüklemeBölümü Yeniden BaşlatmaSonraki BölümSahneler Arasında SaklamaTekrar: Bölüm Seçimi10Proje: 3D Platform Oyunu
ParkurHareketli Platformlar2Düğ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 Paralar