Skrip Dasar Musuh
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 2 dari 50.
Musuh menggunakan sebagian besar kode yang sama: poin nyawa, kecepatan, dan cara bergerak. Kode itu dapat berada di class dasar yang diturunkan dari MonoBehaviour, lalu setiap jenis musuh diturunkan dari class tersebut. Enemy ini mengatur poin nyawanya di Start dan berjalan ke arah yang dihadapinya di Update, sedangkan Ghost mengubah kecepatan awalnya 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, 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, tetapi skrip lain tidak bisa.
Unity mencari Start dan Update berdasarkan namanya, apa pun aksesnya, lalu memanggil yang ada di class turunan paling jauh. Jika Start milik Enemy berupa void Start() private dan Ghost mendeklarasikan Start sendiri, Unity hanya akan memanggil Start milik Ghost. Start milik Enemy tidak akan pernah dijalankan, dan hp akan tetap 0 tanpa error. Mendeklarasikan pesan milik class dasar sebagai protected virtual membuatnya jelas sebagai C# biasa: subclass menulis override, lalu base.Start() menjalankan bagian milik class dasar pada titik tempat kamu memanggilnya. Jika kamu tidak menyertakan pemanggilan itu, bagian milik class dasar akan dilewati. Dengan begitu, subclass mengganti suatu langkah alih-alih menambahkannya.
Tantangan
MudahMonster-monster bergerak menuju kastel. Enemy.cs berisi hal-hal yang dimiliki bersama: Start menetapkan hp ke maxHp dan mengingat spawnPoint, sedangkan Update menggerakkan monster menyusuri sumbu z dengan kecepatan speed. Grunt adalah Enemy biasa dan berfungsi dengan baik. Dua jenis monster menambahkan langkah masing-masing, tetapi kehilangan bagian milik Enemy:
Golem: Start miliknya membuat golem berukuran 1.5 kali lebih besar dan mencatatThe golem wakes up, tetapihp-nya tetap 0 karena Unity menjalankan Start milik Golem dan tidak pernah menjalankan Start milik Enemy.Wasp: Update miliknya mengayunkannya sejauh 1 unit ke kedua sisispawnPoint.x, tetapi ia berzigzag di tempat karena Unity menjalankan Update milik Wasp dan tidak pernah menjalankan Update milik Enemy.
Jadikan Start dan Update milik Enemy sebagai protected virtual, lalu override keduanya di Golem dan Wasp agar masing-masing menjalankan bagian milik Enemy terlebih dahulu, kemudian bagiannya sendiri. Tekan Mainkan, lalu 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;
}
}
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