Menu
CoddyTech

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.

challenge icon

Görev

Kolay

Lava değmeden zeminin karşısına geç. GameManager (bir singleton) ve Lava betiği hazır; oyuna durumlarını ekle.

  • GameManager.cs dosyasında, sınıfın üstünde, Ready, Playing ve GameOver değerlerini bu sırayla içeren bir GameState enum'u tanımla ve GameManager'a state adlı bir public GameState alanı 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 ve Game over günlüğe yazılır. Space, bitmiş bir oyunu asla yeniden başlatmaz.
  • Player.cs dosyası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
    }
}
quiz iconKendini test et

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