Class yang Dapat Diserialisasi
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 15 dari 50.
Skrip dengan banyak pengaturan menampilkan daftar panjang dan datar di Inspector. class C# biasa dapat mengelompokkannya: tandai class tersebut dengan [System.Serializable], lalu field dengan class itu akan ditampilkan sebagai panel lipat yang namanya mengikuti field, dengan field milik class tersebut di dalamnya. Satu class dapat digunakan oleh beberapa field dan beberapa skrip:
[System.Serializable]
public class Stats
{
public float speed = 2f;
public int damage = 10;
}
public class Enemy : MonoBehaviour
{
public Stats normal;
public Stats enraged;
private Stats current;
void Start()
{
current = normal;
}
void Update()
{
transform.Translate(0f, 0f, current.speed * Time.deltaTime);
}
public void Enrage()
{
current = enraged;
}
}Inspector menampilkan dua panel lipat, Normal dan Enraged, masing-masing dengan Speed dan Damage. Setiap Enemy memiliki dua object Stats sendiri, yang nilainya diisi melalui Inspector miliknya sendiri, dan kode membacanya sebagai normal.speed. Unity membuat object ini saat memuat skrip, jadi normal tidak pernah null meskipun tanpa = new Stats(), dan inisialisasi field (2 dan 10) menjadi nilai awal Enemy baru. struct berfungsi dengan cara yang sama jika diberi atribut tersebut, [System.Serializable] public struct Range { public float min; public float max; }, dan seperti Vector3, nilainya disalin saat ditetapkan.
Atribut ini diperlukan karena Unity hanya menyimpan tipe yang diperintahkan untuk disimpan. Tanpanya, class tidak terlihat oleh Inspector: tidak ada panel lipat, nilai yang diatur di sana tidak disimpan, dan Unity tidak membuat object tersebut, sehingga normal.speed menimbulkan NullReferenceException. Di dalam class, aturan Inspector yang biasa tetap berlaku: field publik atau field privat dengan [SerializeField], bukan property atau field static.
Tantangan
MudahSenter penjelajah memiliki dua berkas cahaya, dan tombol Spasi digunakan untuk beralih di antaranya: berkas cahaya lebar dan hangat untuk melihat-lihat, serta berkas cahaya putih sejuk yang terfokus dan menjangkau jauh ke dalam gua. Flashlight.cs menyimpan tiga pengaturan setiap berkas cahaya dalam enam field terpisah. Scene sudah disiapkan dengan pengaturan yang dikelompokkan untuk setiap berkas cahaya, dan skrip harus menyesuaikannya:
- Deklarasikan struct
Beamdengan tiga field publik:color(sebuah Color),rangedanangle(float). Inspector harus menampilkannya. - Ganti enam field terpisah dengan dua field Beam,
widedanfocused. Scene mengatur wide ke warna hangat, range 6, dan angle 80, serta focused ke warna putih sejuk, range 15, dan angle 25. - Buat
Apply()membaca Beam dari berkas cahaya yang sedang digunakan dan mengaturcolor,range, danspotAnglemilik Light berdasarkan Beam tersebut. Bagian lainnya tetap: senter mulai dengan berkas cahaya lebar, dan tombol Spasi digunakan untuk beralih berkas cahaya.
Tekan Play, tekan Spasi untuk menerangi ujung gua yang jauh, lalu tekan Periksa.
Coba sendiri
using UnityEngine;
using UnityEngine.InputSystem;
public class Flashlight : MonoBehaviour
{
public Color wideColor = Color.white;
public float wideRange = 5f;
public float wideAngle = 60f;
public Color focusedColor = Color.white;
public float focusedRange = 10f;
public float focusedAngle = 30f;
private bool focusedOn;
private Light lamp;
void Start()
{
lamp = GetComponent<Light>();
Apply();
}
void Update()
{
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
focusedOn = !focusedOn;
Apply();
}
}
void Apply()
{
lamp.color = focusedOn ? focusedColor : wideColor;
lamp.range = focusedOn ? focusedRange : wideRange;
lamp.spotAngle = focusedOn ? focusedAngle : wideAngle;
}
}
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 Modular4Data Terserialisasi
Class yang Dapat DiserialisasiList di InspectorEnum di InspectorRingkasan: Tabel Loot5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaGelombang sebagai DataUlasan: database Item8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearest