Salah satu cara cepat untuk mendapatkan pasangan nilai kunci di inspektur Unity adalah dengan menentukan kelas entri berseri, dan kemudian menggunakan array atau Daftar <> dari mereka. misalnya...
public class SpellAnimationMap : ScriptableObject
{
[System.Serializable]
public class SpellAnimationEntry
{
public Spell spell;
public AnimationClip animation;
}
public SpellAnimationEntry[] spellAnimations;
}
Secara otomatis, ini akan memberi Anda daftar yang bisa diubah ukurannya di inspektur tempat Anda dapat memasukkan kunci dan nilai, tanpa perlu menulis inspektur khusus.
Hasilnya terlihat seperti ini:
(Satu trik: jika kelas entri berseri berisi bidang "Nama", string itu akan ditampilkan alih-alih judul "Elemen 0" yang lunak. Berguna jika Anda memiliki data yang lebih rumit, Anda ingin dapat menavigasi secara efisien.)
Menjadikan ini sebagai ScriptableObject memungkinkan Anda untuk memperlakukannya sebagai Aset yang dibagikan antara jenis entitas / instance yang memerlukan rangkaian animasi yang sama, sehingga menghindari duplikasi daftar untuk masing-masing entitas. (Kelas-kelas lain cenderung diserialisasi per-instance dalam Unity). Untuk menempuh rute ini, Anda harus menambahkan skrip editor kecil agar Anda dapat membuat instance ini di folder Aset Anda .
Sunting: sekarang bahkan lebih mudah - Anda bisa menambahkan atribut ini di atas ScriptableObject Anda:
[CreateAssetMenu(fileName = "fileName.asset", menuName = "Some Folder/Menu Label")]
Ini menempatkan ScriptableObject ke dalam menu Buat Anda, seperti:
Anda dapat membuat array menjadi privat dan berseri secara opsional sehingga masih muncul di inspektur, tetapi menambahkan Kamus publik (atau kamus pribadi dengan metode GetAnimation (Mantra Ejaan) publik agar klien dapat menggunakan untuk pencarian yang lebih efisien. Dalam metode OnEnable (), SpellAnimationMap dapat mengulangi melalui array yang diisi oleh inspektur untuk membuat kamus ini sekali, sekali lagi membagikan manfaat di antara semua instance klien. (Perhatikan bahwa OnEnable () juga dipanggil di editor ketika aset pertama kali dibuat, jadi pastikan untuk memeriksa bahwa array Anda tidak nol sebelum Anda mencoba membacanya)
Terakhir, Anda dapat menambahkan sebanyak mungkin ke dalam tipe data entri ini yang Anda butuhkan. Ini dapat menyertakan cetakan juga, misalnya, atau sejumlah bit data lain yang ingin Anda tautkan ke kunci ejaan.
Dimungkinkan juga untuk menulis inspektur khusus untuk mengisi bidang Kamus <,> secara langsung, tetapi kesan yang saya dapatkan adalah bahwa sangat rewel untuk bekerja dengan lancar.