Komponen Abstrak
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 3 dari 64.
Beberapa kelas dasar 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 kelas seperti itu dengan abstract, lalu deklarasikan setiap langkah yang harus ditulis oleh subkelasnya sebagai method abstrak, tanpa isi:
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);
}
}
}Subkelas yang tidak menulis Fire tidak bisa dikompilasi: CS0534, 'Pistol' does not implement inherited abstract member 'Weapon.Fire()'. Unity juga menolak menambahkan skrip abstrak ke sebuah objek. Seret Weapon ke objek, lalu Unity menampilkan pesan Can't add script behaviour 'Weapon'. The script class can't be abstract!, karena Unity tidak bisa membuat Weapon yang tidak memiliki Fire.
Skrip lain tetap bisa menggunakan tipe dasar. GetComponent<Weapon>() mengembalikan subkelas apa pun yang ada pada objek, dan Pull() menjalankan Fire milik subkelas 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 skrip Player tetap sama.
Tantangan
MudahJadikan Monster abstrak dan biarkan menara menyetrum setiap jenis monster.
- Di
Monster, tulispublic abstract class Monsterdanprotected abstract void React();, tanpa isi fungsi. - Sekarang compiler menunjuk ke
Imp: tambahkanprotected override void React()yang menambahkanVector3.forward * 2fke posisinya. - Di
Tower, di dalam perulangan, panggilZap()padatarget.GetComponent<Monster>().
Tekan tombol “Main” lalu Space: slime menyusut, imp melompat mundur. Lalu tekan tombol “Periksa”.
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()
{
}
}
Semua pelajaran di Arsitektur Game di Unity
1Komponen, Bukan Hierarki
Komponen KecilSkrip Dasar MusuhKomponen AbstrakKomponen yang Bekerja BersamaRangkuman: Turret ModularRangkuman: Meriam Kembar4Data yang Diserialisasi
Class yang Dapat DiserialisasiList di InspectorEnum di InspectorRangkuman: Tabel LootRangkuman: Acak Loot2Antarmuka di Unity
IDamageableAntarmuka dan TryGetComponentGetComponentsRingkasan: Tombol InteractRingkasan: Terdekat dalam Jangkauan5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaSelamatkan AnginGelombang sebagai DataRekap: database ItemBeli dari Toko8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearestLatihan sendiri: Playground Unity