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.
Tantangan
MudahRunner bergabung dengan Grunt: lebih cepat, dengan health lebih sedikit. Buat asset tersendiri untuk setiap jenis.
- Di
EnemyData.cs, buat EnemyData dapat dibuat dari menu Create dengan nama menuTower Defense/Enemy Data, lalu tambahkan field publikspeed(float),maxHealthdanreward(int). - Di
Enemy.cs, ganti fieldspeeddengan field publikdatabertipe EnemyData, lalu bergerak dengandata.speed. - Tambahkan int privat
health, lalu atur nilainya kemaxHealthmilik asset diAwake.
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
{
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.