Selesaikan NullReferenceException yang disebabkan oleh mewarisi instantiasi skrip MonoBehaviour dalam Unity
Dalam Unity, apabila cuba mencipta tika baharu kelas Peraturan yang mewarisi daripada MonoBehaviour, anda mungkin menghadapi masalah pelik: walaupun parameter ditetapkan dengan betul, tika kelas yang dikembalikan oleh kata kunci new
adalah kosong.
Punca masalah:
Punca masalah ini ialah kelas MonoBehaviour tidak boleh digunakan menggunakan kata kunci new
. Selepas mewarisi MonoBehaviour, kaedah instantiasi yang betul ialah menggunakan AddComponent()
atau Instantiate()
.
Penyelesaian 1: Gunakan AddComponent()
Jika anda ingin menambah skrip Peraturan pada GameObject sedia ada, gunakan AddComponent()
:
<code class="language-C#">Rule rule2 = null; void Start() { rule2 = gameObject.AddComponent<Rule>(); }</code>
Penyelesaian 2: Gunakan Instantiate() dan prefab
Jika anda mempunyai prefab skrip Peraturan, anda boleh menggunakan Instantiate()
:
<code class="language-C#">public Rule rulePrefab; Rule rule2; void Start() { rule2 = Instantiate(rulePrefab) as Rule; }</code>
Penyelesaian 3: Dapatkan contoh sedia ada daripada skrip yang dilampirkan
Jika skrip Peraturan dilampirkan pada GameObject, contohnya boleh diperolehi terus:
<code class="language-C#">Rule rule2; void Start() { rule2 = GameObject.Find("NameObjectScriptIsAttachedTo").GetComponent<Rule>(); }</code>
Nota untuk kelas bukan MonoBehaviour:
Jika kelas Rule tidak mewarisi MonoBehaviour, anda boleh menggunakan kata kunci new
untuk mencipta contoh dan menggunakan pembina seperti yang diperlukan.
Ringkasan:
Apabila menggunakan kelas yang diwarisi daripada MonoBehaviour, pastikan anda mengelak daripada menggunakan kata kunci new
untuk membuat kejadian. Kaedah yang disyorkan hendaklah digunakan sebaliknya: AddComponent()
, Instantiate()
atau mendapatkan semula tika sedia ada daripada skrip yang dilampirkan.
Atas ialah kandungan terperinci Mengapakah `baharu` Mengembalikan Null Apabila Menghidupkan Kelas Terhasil dari Kelakuan Mono dalam Perpaduan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!