Menu
CoddyTech

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.

challenge icon

Görev

Kolay

Lav geçişine üç durum ekle.

  1. GameManager sınıfının üzerine public enum GameState { Ready, Playing, GameOver } tanımla ve sınıfın içine public GameState state; ekle.
  2. Update() içinde, Ready durumundayken Space tuşu Playing durumunu ayarlasın ve Go! kaydını yazdırsın. HitLava() içinde, Playing durumundayken GameOver durumunu ayarla ve Game over kaydını yazdır.
  3. Player.cs içinde yön tuşlarını yalnızca GameManager.Instance.state == GameState.Playing iken 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

Kendi başına pratik yap: Unity playground