首頁 >後端開發 >C++ >為什麼在 Unity 中實例化 MonoBehaviour 衍生類別時「new」回傳 Null?

為什麼在 Unity 中實例化 MonoBehaviour 衍生類別時「new」回傳 Null?

DDD
DDD原創
2025-01-23 20:12:32390瀏覽

Why is `new` Returning Null When Instantiating a MonoBehaviour-Derived Class in Unity?

解決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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn