解決Unity中繼承MonoBehaviour腳本實例化導致的NullReferenceException
在Unity中,嘗試建立繼承自MonoBehaviour的Rule類別的新實例時,可能會遇到一個奇怪的問題:即使參數設定正確,new
關鍵字傳回的類別實例也為空。
問題根源:
這個問題的根本原因在於,不能使用new
關鍵字實例化MonoBehaviour類別。繼承MonoBehaviour後,正確的實例化方法是使用AddComponent()
或Instantiate()
。
解1:使用AddComponent()
如果要將Rule腳本加入現有的GameObject,請使用AddComponent()
:
<code class="language-C#">Rule rule2 = null; void Start() { rule2 = gameObject.AddComponent<Rule>(); }</code>
解決方案2:使用Instantiate()和預製體
如果有一個Rule腳本預製體,可以使用Instantiate()
:
<code class="language-C#">public Rule rulePrefab; Rule rule2; void Start() { rule2 = Instantiate(rulePrefab) as Rule; }</code>
解決方案3:從已附加的腳本取得現有實例
如果Rule腳本已附加到GameObject,可以直接取得其實例:
<code class="language-C#">Rule rule2; void Start() { rule2 = GameObject.Find("NameObjectScriptIsAttachedTo").GetComponent<Rule>(); }</code>
非MonoBehaviour類的注意事項:
如果Rule類別不繼承MonoBehaviour,則可以使用new
關鍵字建立實例,並根據需要使用建構子。
總結:
使用繼承自MonoBehaviour的類別時,務必避免使用new
關鍵字建立實例。 應改用建議的方法:AddComponent()
、Instantiate()
或從已附加的腳本中檢索現有實例。
以上是為什麼在 Unity 中實例化 MonoBehaviour 衍生類別時「new」回傳 Null?的詳細內容。更多資訊請關注PHP中文網其他相關文章!