Unity の Null クラス インスタンスのトラブルシューティング
Unity 開発者は、一見正しいパラメータ割り当てであっても、null クラス インスタンスに遭遇することがよくあります。これは通常、MonoBehaviour
.
MonoBehaviour
難問
MonoBehaviour
から継承したスクリプトは Unity コンポーネントとなり、ライフサイクル管理の対象となります。 これは、new
キーワードを直接使用してインスタンスを作成するのは正しくないことを意味します。 Unity では、インスタンス化に特定のメソッドを使用することが義務付けられています。
正しいインスタンス化: GameObject.AddComponent()
「Rule」のような MonoBehaviour
派生クラスの場合、インスタンス化では GameObject.AddComponent()
:
<code class="language-C#">Rule rule2 = null; void Start() { rule2 = gameObject.AddComponent<Rule>(); }</code>
これにより、Unity のシステムと適切に統合されます。
非MonoBehaviour
クラスのインスタンス化
「ルール」が MonoBehaviour
から継承しない場合は、new
キーワードを使用できます:
<code class="language-C#">Rule rule2 = null; void Start() { rule2 = new Rule(3); }</code>
ここでは、直接インスタンス化とパラメータ割り当てが期待どおりに機能します。
コールバック関数の考慮事項
古い Unity バージョンでは、new
派生クラスで MonoBehaviour
を使用するときに微妙な問題が発生しました。 Start()
のようなコールバック関数が正しくトリガーされない可能性があります。これは新しいバージョンではあまり目立たないかもしれませんが、ベスト プラクティスでは依然として正しいインスタンス化メソッドを使用することが求められます。
重要なポイント
適切なインスタンス化は、クラスが MonoBehaviour
から継承するかどうかによって決まります。 GameObject.AddComponent()
派生クラスには MonoBehaviour
を使用し、他のクラスには new
を使用すると、null 参照エラーが防止され、Unity 内でのスクリプトの正しい動作が確保されます。
以上がパラメーターが適切に割り当てられているにもかかわらず、Unity クラスのインスタンスが Null になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。