Menu
CoddyTech

Oyunu Tek Bir Betik Yönetiyor

Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 12 / 56.

Skoru oyuncunun betiğine, canları bir sağlık betiğine ve oyun sonu kontrolünü üçüncü bir betiğe koyarsan, her betiğin diğerlerinin sayılarına ihtiyacı olur ve her yeni kural birden fazla dosyayı etkiler. Unity oyunlarında bu sayılar genellikle kendine ait boş bir GameObject üzerindeki tek bir betiğe, GameManager'a verilir. Skoru, canları ve oyunu bitiren kuralı o yönetir. Diğer betikler yalnızca olanları, onun herkese açık yöntemlerini çağırarak bildirir. Bu penaltı atışlarında ağ, her golü bildirir:

public class GameManager : MonoBehaviour
{
    private int goals;
    private int shotsLeft = 5;

    public void ShotTaken(bool scored)
    {
        if (shotsLeft == 0) return;
        shotsLeft--;
        if (scored) goals++;
        Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
        if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
    }
}
// Net.cs, kalenin tetikleyicisinde
public GameManager game;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Ball")) game.ShotTaken(true);
}

Ağ, kaç şut kaldığını veya oyunun ne zaman biteceğini bilmez. Bir golü bildirir, bunun ne anlama geldiğine yönetici karar verir; kalecinin betiği ise bir kurtarışı game.ShotTaken(false) ile bildirir. 3 şutluk bir atış serisi için tek bir betikteki tek bir sayıyı değiştirirsin. ShotTaken yönteminin başındaki kontrol, maç bittikten sonra kaleye giren bir topun sayılmasını engeller.

game alanını Inspector'da GameManager nesnesini üzerine sürükleyerek doldurursun; Unity, o nesnedeki GameManager betiğini bulur. Yönetici aynı zamanda HUD için de doğru yerdir: skor metnini ve oyun sonu panelini tuttuğunda, ekran sayıları değiştiren yöntemle aynı yöntemde güncellenir ve başka hiçbir betik kullanıcı arayüzüne dokunmaz.

challenge icon

Görev

Kolay

Bir mücevher avı. Oklar Player'ı hareket ettirir (betiği hazır). Mücevherler points değerleri kadar puan kazandırır, bombalar bir can götürür ve her şeyi bir GameManager yönetir. Inspector'da her mücevherin ve bombanın game alanı zaten GameManager nesnesine, GameManager'ın alanları da HUD'a ve Player'a bağlanmıştır.

GameManager.cs içinde:

  • AddScore(int points), puanları score değerine ekler ve Score: 6 olarak scoreText içinde gösterir.
  • LoseLife(), lives değerinden 1 düşürür (başlangıçta 3) ve Lives: 2 olarak livesText içinde gösterir.
  • lives 0'a ulaştığında oyun biter: gameOverPanel öğesini göster ve okların çalışmasını durdurmak için Player betiğini devre dışı bırak. Bundan sonra AddScore hiçbir şeyi değiştirmez.

Gem.cs ve Bomb.cs içinde: Player (etiketi Player olan) bunlardan birine dokunduğunda, oyun yöneticisine durumu bildirir (mücevher kendi points değerini, bomba ise kaybedilen bir canı) ve kendisini kaldırır.

Play'e bas, mücevherleri topla ve bombalara çarp, ardından Check'e bas.

Kendin dene

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public TMP_Text scoreText;
    public TMP_Text livesText;
    public GameObject gameOverPanel;
    public Player player;
    private int score;
    private int lives = 3;
    private bool gameOver;

    public void AddScore(int points)
    {
        // Oyun bitmediyse puanları ekle ve yeni skoru göster
    }

    public void LoseLife()
    {
        // Bir can eksilt ve kalan can sayısını göster; 0 can kaldığında oyun biter
    }
}
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