Skrip Dasar Musuh
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 2 dari 64.
Di C#, sebuah class dapat diturunkan dari class lain: class Ghost : Enemy mendapatkan setiap field dan method dari Enemy, lalu menambahkan miliknya sendiri. Method yang ditandai virtual oleh class dasar dapat diganti di subclass dengan override, dan base.Describe() menjalankan versi class dasar dari dalam versi yang baru. Dalam C# biasa:
class Enemy
{
protected int hp = 3;
public virtual string Describe()
{
return "Enemy with " + hp + " hp";
}
}
class Ghost : Enemy
{
public override string Describe()
{
return base.Describe() + ", see-through";
}
}Describe() milik Ghost mengembalikan Enemy with 3 hp, see-through. protected berarti Enemy dan subclass-nya dapat menggunakan hp, sedangkan class lain tidak.
Di Unity, sebagian besar kode musuh sama: poin nyawa, kecepatan, dan cara bergerak. Kode itu berada di class dasar yang diturunkan dari MonoBehaviour, lalu setiap jenis musuh diturunkan darinya. Enemy ini menetapkan poin nyawanya di Start dan berjalan ke arah yang dihadapinya di Update, sedangkan Ghost mengubah Start agar bergerak dua kali lebih cepat:
public class Enemy : MonoBehaviour
{
public int maxHp = 3;
public float speed = 2f;
protected int hp;
protected virtual void Start()
{
hp = maxHp;
}
protected virtual void Update()
{
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}public class Ghost : Enemy
{
protected override void Start()
{
base.Start();
speed *= 2f;
}
}Ghost mewarisi field-nya, jadi Inspector menampilkan maxHp dan speed pada Ghost. Ghost juga mewarisi Update, jadi ia berjalan tanpa memiliki Update sendiri. hp bersifat protected: Enemy dan subclass-nya dapat menggunakannya, sedangkan skrip lain tidak.
Unity mencari Start dan Update berdasarkan nama, apa pun aksesnya, lalu memanggil method yang ada di class turunan paling akhir. Jika Start milik Enemy berupa void Start() private dan Ghost mendeklarasikan Start sendiri, Unity hanya akan memanggil milik Ghost: Start milik Enemy tidak akan pernah berjalan, dan hp akan tetap bernilai 0 tanpa error. Mendeklarasikan pesan milik class dasar sebagai protected virtual membuatnya menjadi C# biasa: subclass menulis override, dan base.Start() menjalankan bagian milik class dasar di tempat kamu memanggilnya. Jika pemanggilan itu tidak disertakan, bagian milik class dasar dilewati. Dengan cara ini, subclass mengganti suatu langkah, bukan menambahkannya.
Tantangan
MudahBuat Golem dan Wasp menjalankan bagian Enemy sebelum bagian mereka sendiri.
- Di
Enemy, tulisprotected virtualsebelumvoid Start()danvoid Update(). - Di
Golem, ubah menjadiprotected override void Start()denganbase.Start();sebagai baris pertamanya. - Di
Wasp, ubah menjadiprotected override void Update()denganbase.Update();sebagai baris pertamanya.
Tekan tombol “Main”: golem bergerak dengan hp penuh, dan tawon bergerak zigzag. Lalu tekan tombol “Periksa”.
Coba sendiri
using UnityEngine;
// Hal yang dimiliki setiap monster.
public class Enemy : MonoBehaviour
{
public int maxHp = 4;
public float speed = 1.5f;
protected int hp;
protected Vector3 spawnPoint;
void Start()
{
hp = maxHp;
spawnPoint = transform.position;
}
void Update()
{
// Bergerak menuju kastel, ke arah negatif sumbu z.
transform.position += Vector3.back * speed * Time.deltaTime;
}
}
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