Komponen yang Bekerja Sama
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 4 dari 50.
Komponen kecil tetap saling membutuhkan. Jetpack membutuhkan Fuel pada object yang sama, jadi Jetpack mencari Fuel sekali di Awake, menyimpannya di sebuah field, lalu berinteraksi dengannya melalui dua method publik kecil:
public class Fuel : MonoBehaviour
{
public float amount = 10f;
public bool IsEmpty()
{
return amount <= 0f;
}
public void Burn(float units)
{
amount = Mathf.Max(amount - units, 0f);
}
}[RequireComponent(typeof(Fuel))]
public class Jetpack : MonoBehaviour
{
public float lift = 4f;
private Fuel fuel;
void Awake()
{
fuel = GetComponent<Fuel>();
}
void Update()
{
if (Keyboard.current.spaceKey.isPressed && !fuel.IsEmpty())
{
fuel.Burn(Time.deltaTime);
transform.position += Vector3.up * lift * Time.deltaTime;
}
}
}[RequireComponent(typeof(Fuel))] membuat Unity menambahkan Fuel setiap kali Jetpack ditambahkan, baik di Editor maupun dengan AddComponent, dan menolak menghapus Fuel selama Jetpack masih ada. Unity memeriksanya hanya saat Jetpack ditambahkan, jadi Jetpack yang sudah ada pada object sebelum kamu menulis atribut tersebut akan tetap menggunakan pengaturan lamanya. Awake adalah tempat untuk mengambilnya: Awake berjalan sekali, dan semua komponen milik object tersebut sudah tersedia saat itu.
Jetpack tidak pernah mengubah amount sendiri. Fuel menentukan arti membakar bahan bakar, misalnya memastikan nilainya tidak pernah kurang dari 0, dan Jetpack hanya meminta. Jika nantinya Fuel menampilkan pengukur atau mengisi ulang dari pickup, Jetpack tidak perlu diubah.
Tantangan
MudahDash si pemain skateboard gratis: Space mendorongnya 3 unit ke depan (+z) setiap kali kamu menekannya. Buat dash menghabiskan stamina. Tombol panah menggerakkannya dengan skateboard (Mover.cs, sudah siap), dan Stamina.cs sudah mengisi ulang current sebesar regen per detik, hingga max (100).
- Di Stamina, tambahkan method publik
bool TrySpend(float cost). Jikacurrentsetidaknya sebesarcost, kurangicurrentsebesarcostdan kembalikantrue; jika tidak, biarkancurrentseperti semula dan kembalikanfalse. - Buat Dash memerlukan Stamina pada object-nya, agar Unity menambahkan Stamina setiap kali Dash ditambahkan. Ambil komponennya sekali, di Awake, lalu simpan ke field.
- Satu dash menghabiskan
cost(Inspector menetapkan nilai 40). Space hanya melakukan dash jika TrySpend menyetujuinya, dan jika tidak, catatToo tired.
Tekan Play dan lakukan dash sampai dia kehabisan stamina, lalu tekan Check.
Coba sendiri
using UnityEngine;
using UnityEngine.InputSystem;
public class Dash : MonoBehaviour
{
public float distance = 3f;
public float cost = 40f;
void Update()
{
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
transform.position += Vector3.forward * distance;
}
}
}
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