Katakanlah saya memiliki variabel bernama button
tipe Button
yang tentu saja System.Serializable
.
Saya ingin variabel itu dapat ditetapkan melalui inspektur, jadi saya membuatnya public
:
public class SomeScript : MonoBehaviour{
public Button button;
}
Yang memberi saya itu:
Sekarang, saya ingin menjaga kode bersih & aman (terorganisir) dan ada alasan nyata mengapa saya harus menjaga enkapsulasi.
Saya tahu bahwa ada beberapa cara untuk mengambil komponen pada runtime seperti transform.Find("Some/Genius/TypeUnsafe/Path")
atau GameObject.Find("3 seconds scene iteration").GetComponent(...).
saya ingin menghindarinya.
Bagaimana cara mencampur variabel private access
dengan variabel tersebut public access
di inspektur?
unity
serialization
Yakub
sumber
sumber
private
tidak benar-benar dimaksudkan untuk mencegah pihak ketiga dari mendapatkan akses ke lapangan, itu dimaksudkan untuk memberikan cara untuk mengatakan "jangan melihat ke balik tirai pada apa yang sebenarnya saya lakukan" - yaitu, itu sebagian besar cara untuk membuat Anda tidak mendapatkan akses ke sana.UI
/API
MVC
/MVVM
pola untuk aplikasi besar (klien game sebenarnya) dan saya harus memisahkanUI
dariAPI
. Saya perlu menetapkan nilai melalui penyebab inspektur hanya - tidak ada cara lain.Find()
metode mengetik tidak aman, dan lebih mudah untuk menyatukan semuanya dengan menyeret & menjatuhkan. Sangat sulit untuk membangun kerangka kerja OOP klasikUnity
dan Anda harus mencari hal-hal seperti ini.Jawaban:
Anda sedang mencari Atribut SerializeField
Dari dokumen:
Kode Anda kemudian akan terlihat seperti ini:
sumber
[SerializeField] private Button button;
Saya merasa lebih mudah untuk memindai ketika ada banyak bidang dalam satu baris. Juga, letakkan dokumen untuk "Anda hampir tidak pernah membutuhkan ini"; Saya benar-benar melakukan ini sepanjang waktu.Anda dapat menunjukkan variabel pribadi Anda Dengan menambahkan SerializeField atribut sebelum variabel. Sesuatu seperti ini
Variabel di atas akan ditampilkan kepada inspektur Anda, tetapi kelas Anda yang lain tidak akan bisa mendapatkannya. Sebaliknya, Anda juga dapat menyembunyikan arsip publik Anda di inspektur melalui HideInInspector atribut . Sesuatu seperti ini
Variabel Anda di atas akan dapat diakses oleh skrip Anda yang lain tetapi tidak akan ditampilkan kepada inspektur.
sumber