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.
Tantangan
SulitInspector 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.
BossmengimplementasikanIDamageable. DiAwake, Boss menetapkan health-nya kemaxHealth, lalu membuatStateMachinedan tiga state-nya, yang disimpan di field publikmachine,chase,windup, danrest(setiap state menerima boss di constructornya). DiStart, Boss memicuHealthChangeddengan health danmaxHealth-nya, lalu memulai dalam statechase. Setiap frame, Boss menjalankan tick pada machine.ChaseState: memberi warnaColor.graypada golem, lalu membuatnya berjalan menyusuri tanah menuju pemain dengan kecepatanspeed. Saat pemain berada dalam jarakslamRange, state ini beralih ke windup.WindupState: memberi warnaColor.redpada golem dan membuatnya diam selamawindupTimedetik. Setelah itu, state ini mencatatSlam!, memberikanslamDamagekepada pemain melaluiIDamageablemiliknya jika pemain masih berada dalam jarakslamRange, lalu beralih ke rest.RestState: memberi warnaColor.cyanpada golem dan menunggu selamarestTimedetik, lalu beralih kembali ke chase. Setiap windup dan setiap rest berlangsung selama durasi penuhnya.TakeDamagehanya menghitung damage saat golem berada dalam state rest dan masih berdiri: health-nya dikurangi sebesar jumlah damage, laluHealthChangeddipicu. Saat health mencapai 0, golem mencatatThe golem falls, memanggilonDefeated, 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;
}
}
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 SamaRingkasan: Turret Modular5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaGelombang sebagai DataUlasan: database Item8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearest