Oyun Durumları
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 14 / 60.
Bir oyun aynı anda tek bir durumda olur: oyuncuyu bekler, çalışır ya da bitmiştir. isPlaying ve isOver gibi iki bool yanlışlıkla aynı anda true olabilir; "Playng" gibi bir dize ise derlenir ama hiçbir zaman eşleşmez. C#’ta sabit bir seçenek listesi için enum türü vardır. Bu yaya geçidi ışığı da bunu kullanıyor:
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ğeri olan yeni bir tür oluşturur: Signal.Red, Signal.Yellow ve Signal.Green. Bir Signal alanı bu değerlerden birini tutar; alanı == ile karşılaştırır ve = ile değiştirirsin. Yanlış yazılmış Signal.Gren bir derleme hatasıdır, bu yüzden “Oyna”ya basmadan önce hata görünür.
Enum sınıfın dışında tanımlandığından her betik Signal türünü kullanabilir ve bir yayanın betiği crossing.CanWalk() metodunu çağırabilir. Yeni bir enum alanı ilk değeriyle başlar; burada bu değer Red’dir. Inspector’da herkese açık bir enum alanı, değerlerinin yer aldığı bir açılır liste olarak görünür. Temelde her değer 0’dan başlayarak numaralandırılır: (int)Signal.Green değeri 2’dir.
Görev
KolayLav geçişine üç durum ekle.
- GameManager sınıfının üzerine
public enum GameState { Ready, Playing, GameOver }tanımla ve sınıfın içinepublic GameState state;ekle. Update()içinde, Ready durumundayken Space tuşu Playing durumunu ayarlasın veGo!kaydını yazdırsın.HitLava()içinde, Playing durumundayken GameOver durumunu ayarla veGame overkaydını yazdır.Player.csiçinde yön tuşlarını yalnızcaGameManager.Instance.state == GameState.Playingiken oku.
“Oyna” düğmesine bas: yön tuşları Space tuşunu bekler. Ardından “Kontrol et” düğmesine 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 yazar
}
public void HitLava()
{
// Playing durumundayken oyun biter: Game over mesajını günlüğe yaz
}
}
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 Paralar3Oyun Yöneticisi
Oyunu Tek Bir Betik YönetiyorSingletonOyun DurumlarıDuruma Göre GeçişÖzet: Tur YöneticisiKendi başına pratik yap: Unity playground