Patron Savaşı
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 50 / 50.
Taş bir golemin arenanın çıkış kapısını koruyor. Sana doğru ilerliyor ve yaklaştığında bir saniyeliğine yumruklarını kaldırıp yere vuruyor; hâlâ yakınındaysan bu sana zarar veriyor. Yere vurduktan sonra dinleniyor ve kılıcın ancak o zaman ona zarar verebiliyor: yürürken veya saldırıya hazırlanırken taş derisi her darbeyi savuşturuyor. Rengi ne yaptığını gösteriyor: yürürken gri, saldırıya hazırlanırken kırmızı, dinlenirken camgöbeği. Canını 0'a indir ve kapı açılır. Ekranın üstündeki çubuk her darbeyi takip eder.
Golemin beynini her durum için bir sınıf içeren bir durum makinesi olarak yaz: Boss ve BossStates.cs içindeki ChaseState, WindupState ve RestState. Oyuncu, can çubuğu, kapı, IState, StateMachine ve IDamageable hazır.
Görev
ZorInspector, Boss'a player, speed (2), slamRange (2.5), windupTime (1), restTime (2), slamDamage (2) ve maxHealth (6) değerlerini verir ve onDefeated UnityEvent'ini Gate'in Open metoduna bağlar. PlayerDistance() ve Tint(color) hazırdır.
Boss,IDamageable'ı uygular.Awakeiçinde canınımaxHealtholarak ayarlar, birStateMachineve üç durum oluşturur; bunlarmachine,chase,windupverestadlı herkese açık alanlarda tutulur (her durum, kurucusunda boss'u alır).Startiçinde canı vemaxHealthileHealthChangedolayını tetikler vechasedurumunda başlar; her karede makineyi ilerletir.ChaseState: golem'iColor.grayrengine boyar ve yerdespeedhızıyla oyuncuya doğru yürütür. OyuncuslamRangemesafesine girdiğinde windup durumuna geçer.WindupState: golem'iColor.redrengine boyar vewindupTimesaniye boyunca hareketsiz durur. ArdındanSlam!mesajını kaydeder, oyuncu hâlâslamRangemesafesindeyseIDamageableüzerinden oyuncuyaslamDamagehasarı verir ve dinlenme durumuna geçer.RestState: golem'iColor.cyanrengine boyar verestTimesaniye bekler, ardından kovalamaca durumuna geri döner. Her windup ve her dinlenme tam süresi boyunca devam eder.TakeDamageyalnızca golem dinlenme durumundayken ve hâlâ ayaktayken işlenir: belirtilen miktar canından düşülür veHealthChangedtetiklenir. Canı 0 olduğundaThe golem fallsmesajını kaydeder,onDefeatedolayını çağırır ve kendisini devre dışı bırakır.
Play'e bas, darbelerden kaç ve golem dinlenirken saldır; ardından Check'e bas.
Kendin dene
using System;
using UnityEngine;
using UnityEngine.Events;
public class Boss : MonoBehaviour
{
public Transform player;
public float speed = 2f;
public float slamRange = 2.5f;
public float windupTime = 1f;
public float restTime = 2f;
public int slamDamage = 2;
public int maxHealth = 6;
public event Action<int, int> HealthChanged;
public UnityEvent onDefeated;
// Oyuncunun yerdeki uzaklığı.
public float PlayerDistance()
{
Vector3 d = player.position - transform.position;
d.y = 0f;
return d.magnitude;
}
// Yürürken gri, saldırıya hazırlanırken kırmızı, dinlenirken camgöbeği.
public void Tint(Color color)
{
GetComponent<Renderer>().material.color = color;
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Hiyerarşiler Değil, Bileşenler
Küçük BileşenlerTemel Bir Düşman BetiğiSoyut BileşenlerBirlikte Çalışan BileşenlerÖzet: Modüler Taret4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larÖzet: Ganimet Tablosu7Durum Makineleri
Sınıflar Olarak DurumlarBir Durum MakinesiGeçişlerDüşmanların Yapay ZekâsıTekrar: Kapı Durumları10Proje: Arena Hayatta Kalma
KahramanDüşman Türleri5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriPaylaşılan AyarlarVeri Olarak DalgalarTekrar: Eşya Veritabanı8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearest