Oyun Durumları
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 14 / 56.
Bir oyun aynı anda tek bir durumda bulunur: oyuncuyu bekliyor, çalışıyor ya da bitmiş. isPlaying ve isOver gibi iki bool yanlışlıkla ikisi de true olabilir; "Playng" gibi bir string ise derlenir ama hiçbir zaman eşleşmez. C#'ta sabit bir seçenek listesi için bir tür vardır: enum. Bu yaya geçidi ışığı da bunu kullanır:
public enum Signal { Red, Yellow, Green }
public class Crossing : MonoBehaviour
{
public Signal signal;
void Update()
{
if (signal == Signal.Red && Input.GetMouseButtonDown(0))
{
signal = Signal.Green;
Debug.Log("Walk!");
}
}
public bool CanWalk()
{
return signal == Signal.Green;
}
}enum Signal { Red, Yellow, Green }, tam olarak üç değer içeren yeni bir tür oluşturur: Signal.Red, Signal.Yellow ve Signal.Green. Bir Signal alanı aynı anda bunlardan birini tutar; == ile karşılaştırır, = ile değiştirirsiniz. Yanlış yazılmış Signal.Gren bir derleme hatasıdır; bu nedenle hatayı Play'e basmadan önce görürsünüz.
Enum sınıfın dışında tanımlanır, böylece her betik Signal türünü kullanabilir ve bir yayanın betiği crossing.CanWalk() çağrısını yapabilir. Yeni bir enum alanı ilk değerle başlar; burada bu değer Red'dir. Inspector'da herkese açık bir enum alanı, değerlerinin bulunduğu bir açılır liste olarak görünür. Altta her değer 0'dan başlayarak sayılan bir sayıdır: (int)Signal.Green değeri 2'dir.
Görev
KolayLava değmeden zeminin karşısına geç. GameManager (bir singleton) ve Lava betiği hazır; oyuna durumlarını ekle.
GameManager.csdosyasında, sınıfın üstünde,Ready,PlayingveGameOverdeğerlerini bu sırayla içeren birGameStateenum'u tanımla ve GameManager'astateadlı bir publicGameStatealanı ekle. Oyun Ready durumunda başlar.- Oyun Ready durumundayken Space tuşu oyunu başlatır: durum Playing olur ve
Go!günlüğe yazılır. - Lava,
HitLava()metodunu çağırır. Oyun Playing durumundayken bu, oyunu bitirir: durum GameOver olur veGame overgünlüğe yazılır. Space, bitmiş bir oyunu asla yeniden başlatmaz. Player.csdosyasında, ok tuşları oyuncuyu yalnızca durum Playing iken hareket ettirir.
Play'e bas, önce Space'e basmadan ok tuşlarını dene, sonra lavaya yürü ve ardından Check'e bas.
Kendin dene
using UnityEngine;
// GameState enum'unu burada tanımla: Ready, Playing, GameOver
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
// state adlı public bir GameState alanı
void Awake()
{
Instance = this;
}
void Update()
{
// Ready durumundayken Space oyunu başlatır ve Go! mesajını günlüğe kaydeder
}
public void HitLava()
{
// Playing durumundayken oyun biter: Game over mesajını günlüğe kaydet
}
}
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 Paralar3Oyun Yöneticisi
Oyunu Tek Bir Betik YönetiyorSingletonOyun DurumlarıDuruma Göre GeçişÖzet: Tur Yöneticisi