Menu
CoddyTech

Pertarungan Bos

Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 50 dari 50.

Sebuah golem batu menjaga gerbang keluar arena. Golem itu menginjakkan kaki dengan keras ke arahmu, lalu saat kamu mendekat, golem itu mengangkat tinjunya selama sesaat dan menghantam tanah, yang akan melukaimu jika kamu masih berada di dekatnya. Setelah menghantam tanah, golem itu beristirahat, dan hanya saat itulah pedangmu bisa melukainya: kulit batunya menahan setiap serangan saat golem itu berjalan atau bersiap menyerang. Warnanya menunjukkan apa yang sedang dilakukannya: abu-abu saat berjalan, merah saat bersiap menyerang, sian saat beristirahat. Kurangi kesehatannya hingga 0 dan gerbang akan terbuka. Bilah di bagian atas layar mencatat setiap serangan.

Tulis otak golem itu sebagai mesin status dengan satu class untuk setiap status: Boss, serta ChaseState, WindupState dan RestState di BossStates.cs. Pemain, bilah kesehatan, gerbang, IState, StateMachine dan IDamageable sudah siap.

challenge icon

Tantangan

Sulit

Inspector memberikan player, speed (2), slamRange (2.5), windupTime (1), restTime (2), slamDamage (2), dan maxHealth (6) kepada Boss, lalu menghubungkan UnityEvent onDefeated miliknya ke Open milik Gate. PlayerDistance() dan Tint(color) sudah siap.

  • Boss mengimplementasikan IDamageable. Di Awake, Boss menetapkan health-nya ke maxHealth, lalu membuat StateMachine dan tiga state-nya, yang disimpan di field publik machine, chase, windup, dan rest (setiap state menerima boss di constructornya). Di Start, Boss memicu HealthChanged dengan health dan maxHealth-nya, lalu memulai dalam state chase. Setiap frame, Boss menjalankan tick pada machine.
  • ChaseState: memberi warna Color.gray pada golem, lalu membuatnya berjalan menyusuri tanah menuju pemain dengan kecepatan speed. Saat pemain berada dalam jarak slamRange, state ini beralih ke windup.
  • WindupState: memberi warna Color.red pada golem dan membuatnya diam selama windupTime detik. Setelah itu, state ini mencatat Slam!, memberikan slamDamage kepada pemain melalui IDamageable miliknya jika pemain masih berada dalam jarak slamRange, lalu beralih ke rest.
  • RestState: memberi warna Color.cyan pada golem dan menunggu selama restTime detik, lalu beralih kembali ke chase. Setiap windup dan setiap rest berlangsung selama durasi penuhnya.
  • TakeDamage hanya menghitung damage saat golem berada dalam state rest dan masih berdiri: health-nya dikurangi sebesar jumlah damage, lalu HealthChanged dipicu. Saat health mencapai 0, golem mencatat The golem falls, memanggil onDefeated, lalu menonaktifkan dirinya.

Tekan Play, hindari serangan slam dan serang saat golem beristirahat, lalu tekan Periksa.

Coba sendiri

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;

    // Jarak pemain di sepanjang permukaan tanah.
    public float PlayerDistance()
    {
        Vector3 d = player.position - transform.position;
        d.y = 0f;
        return d.magnitude;
    }

    // Abu-abu saat berjalan, merah saat bersiap menyerang, sian saat beristirahat.
    public void Tint(Color color)
    {
        GetComponent<Renderer>().material.color = color;
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Arsitektur Game di Unity