Pertarungan Bos
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 64 dari 64.
Golem batu menjaga gerbang keluar arena. Ia mengentakkan kaki ke arahmu, lalu saat kamu mendekat, ia mengangkat tinjunya sebentar dan menghantam tanah. Hantamannya melukaimu jika kamu masih berada di dekatnya. Setelah menghantam, ia beristirahat, dan hanya saat itulah pedangmu bisa melukainya: kulit batunya menangkis setiap serangan saat ia berjalan atau bersiap menghantam. Warnanya menunjukkan apa yang sedang dilakukannya: abu-abu saat berjalan, merah saat bersiap menghantam, dan sian saat beristirahat. Kurangi kesehatannya hingga 0 untuk membuka gerbang. Bilah di bagian atas layar mengikuti setiap serangan.
Tulis otak golem sebagai mesin state dengan satu class untuk setiap state: Boss, serta ChaseState, WindupState, dan RestState di BossStates.cs. Pemain, bilah kesehatan, gerbang, IState, StateMachine, dan IDamageable sudah siap, dan Boss sudah membuat state-nya serta menjalankan mesin.
Tantangan
SulitTulis semua state golem di BossStates.cs.
ChaseState:Tint(Color.gray); berjalan mendekati pemain denganspeed; saat berada dalam jangkauanslamRange, bersiap menyerang.WindupState:Tint(Color.red); setelahwindupTime, catatSlam!, lukai pemain dalam jangkauan sebesarslamDamage, lalu beristirahat.RestState:Tint(Color.cyan); setelahrestTime, kejar pemain.Boss.TakeDamagehanya menghitung kerusakan saat berada dalam staterest: kurangi health sebesar jumlah kerusakan, picuHealthChanged, lalu panggilFall()saat health mencapai 0.
Tekan tombol “Main” dan serang saat golem beristirahat. Lalu tekan tombol “Periksa”.
Coba sendiri
using System;
using UnityEngine;
using UnityEngine.Events;
public class Boss : MonoBehaviour, IDamageable
{
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;
public StateMachine machine;
public IState chase;
public IState windup;
public IState rest;
private int health;
void Awake()
{
health = maxHealth;
machine = new StateMachine();
chase = new ChaseState(this);
windup = new WindupState(this);
rest = new RestState(this);
}
void Start()
{
HealthChanged?.Invoke(health, maxHealth);
machine.ChangeState(chase);
}
void Update()
{
machine.Tick();
}
public void TakeDamage(int amount)
{
// Serangan hanya dihitung saat golem beristirahat: kurangi nyawanya sebesar amount, picu HealthChanged, lalu panggil Fall() saat nyawanya 0
}
// Siap: golem tumbang, gerbang terbuka, dan golem meninggalkan arena.
void Fall()
{
Debug.Log("The golem falls");
onDefeated.Invoke();
gameObject.SetActive(false);
}
// 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;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Arsitektur Game di Unity
1Komponen, Bukan Hierarki
Komponen KecilSkrip Dasar MusuhKomponen AbstrakKomponen yang Bekerja BersamaRangkuman: Turret ModularRangkuman: Meriam Kembar4Data yang Diserialisasi
Class yang Dapat DiserialisasiList di InspectorEnum di InspectorRangkuman: Tabel LootRangkuman: Acak Loot2Antarmuka di Unity
IDamageableAntarmuka dan TryGetComponentGetComponentsRingkasan: Tombol InteractRingkasan: Terdekat dalam Jangkauan5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaSelamatkan AnginGelombang sebagai DataRekap: database ItemBeli dari Toko8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearestLatihan sendiri: Playground Unity