Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Monster-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 mencatat The golem wakes up, tetapi hp-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 sisi spawnPoint.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;
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Arsitektur Game di Unity