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.
Görev
KolayBir 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ıscoredeğerine ekler veScore: 6olarakscoreTextiçinde gösterir.LoseLife(),livesdeğerinden 1 düşürür (başlangıçta 3) veLives: 2olaraklivesTextiçinde gösterir.lives0'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 sonraAddScorehiç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
}
}
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