Komponen Abstrak
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 3 dari 50.
Beberapa base class menjelaskan jenis sesuatu yang tidak pernah ada dengan sendirinya. Setiap senjata menembak, tetapi senjata yang bukan pistol maupun shotgun tidak punya cara untuk menembak. Tandai class seperti itu dengan abstract, lalu deklarasikan setiap langkah yang harus ditulis oleh subclass-nya sebagai method abstrak, tanpa body:
public abstract class Weapon : MonoBehaviour
{
public int shots;
public void Pull()
{
shots++;
Fire();
}
protected abstract void Fire();
}public class Shotgun : Weapon
{
public GameObject pelletPrefab;
protected override void Fire()
{
for (int i = -1; i <= 1; i++)
{
Instantiate(pelletPrefab, transform.position + transform.right * i * 0.3f, transform.rotation);
}
}
}Subclass yang tidak menulis Fire tidak akan bisa di-compile: CS0534, 'Pistol' does not implement inherited abstract member 'Weapon.Fire()'. Unity juga menolak memasang script abstrak pada object. Seret Weapon ke object, lalu Unity akan menampilkan Can't add script behaviour 'Weapon'. The script class can't be abstract!, karena Unity tidak bisa membuat Weapon tanpa Fire.
Script lain tetap bisa menggunakan tipe dasar. GetComponent<Weapon>() mengembalikan subclass apa pun yang ada pada object, dan Pull() menjalankan Fire milik subclass tersebut:
// Player.cs
private Weapon weapon;
void Start()
{
weapon = GetComponent<Weapon>();
}
void Update()
{
if (Mouse.current.leftButton.wasPressedThisFrame)
{
weapon.Pull();
}
}Ganti komponen Shotgun dengan Pistol, dan script Player tetap sama.
Tantangan
MudahMenara penyihir menyambar monster-monster di lapangan. Monster.cs berisi hal-hal yang dimiliki semua monster: hp (3) dan Zap(), yang mengurangi hp sebanyak 1, menghancurkan monster saat hp mencapai 0, dan jika tidak, memanggil React(). Slime.cs bereaksi dengan mengecil. Imp.cs tidak memiliki reaksi, dan Monster memberinya React kosong, sehingga kamu tidak tahu bahwa reaksi itu belum dibuat.
- Jadikan Monster abstract dan React sebagai method abstract, sehingga monster yang tidak menjelaskan cara bereaksi tidak bisa dikompilasi. Compiler kemudian akan menunjuk ke Imp.
- Tulis React milik Imp: monster itu melompat mundur sejauh 2 unit, menjauhi menara (sepanjang +z).
- Di Tower.cs, saat Space ditekan, dapatkan komponen Monster dari setiap object yang diberi tag Monster, apa pun jenisnya, lalu panggil
Zap().
Tekan Play dan sambar monster-monster itu, lalu tekan Check.
Coba sendiri
using UnityEngine;
// Hal yang dimiliki setiap monster.
public class Monster : MonoBehaviour
{
public int hp = 3;
public void Zap()
{
hp--;
if (hp <= 0)
{
Destroy(gameObject);
}
else
{
React();
}
}
// Cara monster jenis ini bereaksi setelah selamat dari serangan listrik.
protected virtual void React()
{
}
}
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