Unity で MonoBehavior スクリプトのインスタンス化を継承することによって発生する NullReferenceException を解決します
Unity で、MonoBehaviour を継承する Rule クラスの新しいインスタンスを作成しようとすると、奇妙な問題が発生することがあります。パラメーターが正しく設定されている場合でも、new
キーワードによって返されるクラス インスタンスは空です。
問題の原因:
この問題の根本的な原因は、new
キーワードを使用して MonoBehaviour クラスをインスタンス化できないことです。 MonoBehaviour を継承した後の正しいインスタンス化メソッドは、AddComponent()
または Instantiate()
を使用することです。
解決策 1: AddComponent() を使用する
既存のゲームオブジェクトにルール スクリプトを追加する場合は、AddComponent()
を使用します:
<code class="language-C#">Rule rule2 = null; void Start() { rule2 = gameObject.AddComponent<Rule>(); }</code>
解決策 2: Instantiate() とプレハブを使用する
ルール スクリプト プレハブがある場合は、Instantiate()
を使用できます:
<code class="language-C#">public Rule rulePrefab; Rule rule2; void Start() { rule2 = Instantiate(rulePrefab) as Rule; }</code>
解決策 3: 添付されたスクリプトから既存のインスタンスを取得する
ルール スクリプトがゲームオブジェクトにアタッチされている場合、そのインスタンスを直接取得できます:
<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 中国語 Web サイトの他の関連記事を参照してください。