Menu
CoddyTech

Data Musuh

Pelajaran 2 dari 18 dalam kursus Game Unity: Tower Defense di Coddy.

Game tower defense memiliki beberapa jenis musuh: prajurit biasa, pelari cepat, dan tank lambat. Semua prajurit biasa berjalan dengan kecepatan yang sama dan memiliki health awal yang sama, jadi angka-angka itu berlaku untuk jenisnya, bukan untuk satu musuh. Angka-angka tersebut disimpan dalam asset ScriptableObject, satu asset untuk setiap jenis, dan setiap musuh dari jenis itu merujuk ke asset tersebut. Ubah assetnya, dan semua musuh dari jenis itu akan ikut berubah.

Asset tidak boleh menyimpan state dari satu musuh. Prajurit biasa yang terkena serangan memiliki health lebih sedikit daripada prajurit biasa di belakangnya, jadi asset menyimpan maxHealth, yaitu health awal prajurit biasa, lalu setiap musuh menyalinnya ke field miliknya sendiri. Game balap memisahkan data mobil dengan cara yang sama:

[CreateAssetMenu(fileName = "NewCar", menuName = "Racing/Car Data")]
public class CarData : ScriptableObject
{
    public float topSpeed = 30f;
    public float tankSize = 50f;
}

public class Car : MonoBehaviour
{
    public CarData data;
    private float fuel;

    void Awake()
    {
        fuel = data.tankSize;
    }
}

Setiap mobil dari satu model menggunakan CarData yang sama, dan setiap mobil menghabiskan fuel miliknya sendiri. Jika kamu menulis data.tankSize -= used sebagai gantinya, kapasitas tangki semua mobil dari model itu akan berkurang sekaligus, dan di Editor, perubahan itu akan tetap ada di asset setelah Play. Awake berjalan segera setelah object dibuat, jadi salinannya siap sebelum bisa digunakan.

challenge icon

Tantangan

Mudah

Runner bergabung dengan Grunt: lebih cepat, dengan health lebih sedikit. Buat asset tersendiri untuk setiap jenis.

  1. Di EnemyData.cs, buat EnemyData dapat dibuat dari menu Create dengan nama menu Tower Defense/Enemy Data, lalu tambahkan field publik speed (float), maxHealth dan reward (int).
  2. Di Enemy.cs, ganti field speed dengan field publik data bertipe EnemyData, lalu bergerak dengan data.speed.
  3. Tambahkan int privat health, lalu atur nilainya ke maxHealth milik asset di Awake.

Proyek ini memiliki asset GruntData (speed 2, health 9, reward 5) dan asset RunnerData (speed 3.5, health 5, reward 3), lalu Inspector memberikan asset masing-masing kepada setiap enemy. Tekan Play dan lihat Runner mendahului Grunt, lalu tekan Check.

Coba sendiri

using UnityEngine;

// Akan ditambahkan nanti: statistik satu jenis musuh sebagai aset.
public class EnemyData : ScriptableObject
{
}
quiz iconUji dirimu

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

Semua pelajaran di Game Unity: Tower Defense