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 / 60.
Skoru oyuncunun betiğine, canları sağlık betiğine, oyun sonu kontrolünü de üçüncü bir betiğe koyarsan her betiğin diğerlerinin sayılarına ihtiyacı olur; böylece her yeni kural birden çok dosyayı etkiler. Unity oyunlarında bu sayılar genellikle kendine ait boş bir GameObject üzerindeki GameManager betiğinde tutulur. Bu betik skoru, canları ve oyunu bitiren kuralı yönetir. Diğer betikler yalnızca olanları, herkese açık yöntemlerini çağırarak bildirir. Bu penaltı atışlarında her golü kale 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);
}Kale, kaç atış kaldığını veya oyunun ne zaman biteceğini bilmez. Bir gol olduğunu bildirir, bunun ne anlama geldiğine yönetici karar verir; kalecinin betiği ise kurtarışı game.ShotTaken(false) ile bildirir. 3 atışlık bir penaltı atışması için tek bir betikteki tek bir sayıyı değiştirirsin. ShotTaken yönteminin başındaki kontrol, uzatma süresi bittikten sonra kaleye giren bir topun sayılamasını önler.
game alanını Inspector'da GameManager nesnesini üzerine sürükleyerek doldurursun; Unity de bu nesnedeki GameManager betiğini bulur. Yönetici, HUD için de doğru yerdir: skor metnini ve oyun sonu panelini tuttuğunda ekran, sayıları değiştiren yöntem içinde güncellenir ve başka hiçbir betik kullanıcı arayüzüne dokunmaz.
Görev
KolayGameManager'ın puanı ve canları tutmasını sağla.
AddScore(int points):gameOverdeğilsescore'a ekle vescoreText'teScore: 6göster.LoseLife():lives'tan 1 çıkar veLives: 2göster; değer 0 olduğundagameOver'ı ayarla,gameOverPanel'i göster,player.enabled = falseolarak ayarla.GemveBombiçinde,other.CompareTag("Player")olduğundagame.AddScore(points)veyagame.LoseLife()çağır, ardındanDestroy(gameObject)çağır.
“Oyna”ya bas ve üç bombaya çarp. Ardından “Kontrol et”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
}
}
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