Menu
CoddyTech

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.

challenge icon

Görev

Zor

Inspector, 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. Awake içinde canını maxHealth olarak ayarlar, bir StateMachine ve üç durum oluşturur; bunlar machine, chase, windup ve rest adlı herkese açık alanlarda tutulur (her durum, kurucusunda boss'u alır). Start içinde canı ve maxHealth ile HealthChanged olayını tetikler ve chase durumunda başlar; her karede makineyi ilerletir.
  • ChaseState: golem'i Color.gray rengine boyar ve yerde speed hızıyla oyuncuya doğru yürütür. Oyuncu slamRange mesafesine girdiğinde windup durumuna geçer.
  • WindupState: golem'i Color.red rengine boyar ve windupTime saniye boyunca hareketsiz durur. Ardından Slam! mesajını kaydeder, oyuncu hâlâ slamRange mesafesindeyse IDamageable üzerinden oyuncuya slamDamage hasarı verir ve dinlenme durumuna geçer.
  • RestState: golem'i Color.cyan rengine boyar ve restTime saniye bekler, ardından kovalamaca durumuna geri döner. Her windup ve her dinlenme tam süresi boyunca devam eder.
  • TakeDamage yalnızca golem dinlenme durumundayken ve hâlâ ayaktayken işlenir: belirtilen miktar canından düşülür ve HealthChanged tetiklenir. Canı 0 olduğunda The golem falls mesajını kaydeder, onDefeated olayı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;
    }
}
quiz iconKendini test et

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