Komponen yang Bekerja Bersama
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 4 dari 64.
Komponen kecil tetap saling membutuhkan. Jetpack membutuhkan Fuel pada objek yang sama, jadi Jetpack menemukannya sekali di Awake, menyimpannya dalam field, lalu berkomunikasi 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, melalui Editor atau dengan AddComponent, dan mencegah Fuel dihapus selama Jetpack masih ada. Unity memeriksanya hanya saat Jetpack ditambahkan, jadi Jetpack yang sudah ada pada objek sebelum kamu menulis atribut ini akan tetap menggunakan pengaturan lamanya. Awake adalah tempat untuk mengambilnya: method ini berjalan sekali, dan semua komponen milik objek sudah tersedia saat itu.
Jetpack tidak pernah mengubah amount sendiri. Fuel menentukan arti membakar, seperti memastikan nilainya tidak pernah turun di bawah 0, dan Jetpack hanya memintanya. Jika nanti Fuel menampilkan pengukur atau mengisi ulang dari pickup, Jetpack tidak perlu diubah.
Tantangan
MudahBuat dash skater menghabiskan stamina.
- Di
Stamina, tambahkanpublic bool TrySpend(float cost): jikacurrentsetidaknya sebesarcost, kurangicurrentsebesar nilai itu dan kembalikantrue, jika tidak, kembalikanfalse. - Letakkan
[RequireComponent(typeof(Stamina))]di ataspublic class Dash, lalu ambil komponen itu ke dalam sebuah field diAwake(). - Saat tombol Space ditekan, lakukan dash hanya jika
TrySpend(cost)bernilai true; jika tidak, catatToo tired.
Tekan tombol “Main”: setelah dua kali dash, Console menampilkan Too tired. Lalu tekan tombol “Periksa”.
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;
}
}
}
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