Heim >Backend-Entwicklung >C++ >Warum gibt „neu' Null zurück, wenn eine von MonoBehaviour abgeleitete Klasse in Unity instanziiert wird?

Warum gibt „neu' Null zurück, wenn eine von MonoBehaviour abgeleitete Klasse in Unity instanziiert wird?

DDD
DDDOriginal
2025-01-23 20:12:32387Durchsuche

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

NullReferenceException beheben, die durch die Übernahme der MonoBehaviour-Skriptinstanziierung in Unity verursacht wurde

Wenn Sie in Unity versuchen, eine neue Instanz einer Rule-Klasse zu erstellen, die von MonoBehaviour erbt, kann ein seltsames Problem auftreten: Selbst wenn die Parameter richtig eingestellt sind, ist die vom Schlüsselwort new zurückgegebene Klasseninstanz leer.

Ursache des Problems:

Die Hauptursache für dieses Problem ist, dass die MonoBehaviour-Klasse nicht mit dem Schlüsselwort new instanziiert werden kann. Nach der Vererbung von MonoBehaviour besteht die richtige Instanziierungsmethode darin, AddComponent() oder Instantiate() zu verwenden.

Lösung 1: Verwenden Sie AddComponent()

Wenn Sie einem vorhandenen GameObject ein Regelskript hinzufügen möchten, verwenden Sie AddComponent():

<code class="language-C#">Rule rule2 = null;

void Start()
{
  rule2 = gameObject.AddComponent<Rule>();
}</code>

Lösung 2: Verwenden Sie Instantiate() und Prefabs

Wenn Sie ein vorgefertigtes Regelskript haben, können Sie Instantiate() verwenden:

<code class="language-C#">public Rule rulePrefab;
Rule rule2;

void Start()
{
    rule2 = Instantiate(rulePrefab) as Rule;
}</code>

Lösung 3: Vorhandene Instanz aus angehängtem Skript abrufen

Wenn das Regelskript an das GameObject angehängt ist, kann seine Instanz direkt abgerufen werden:

<code class="language-C#">Rule rule2;

void Start()
{
    rule2 = GameObject.Find("NameObjectScriptIsAttachedTo").GetComponent<Rule>();
}</code>

Hinweise für Nicht-MonoBehaviour-Klassen:

Wenn die Rule-Klasse MonoBehaviour nicht erbt, können Sie das Schlüsselwort new verwenden, um eine Instanz zu erstellen und den Konstruktor nach Bedarf zu verwenden.

Zusammenfassung:

Wenn Sie Klassen verwenden, die von MonoBehaviour erben, vermeiden Sie unbedingt die Verwendung des Schlüsselworts new zum Erstellen von Instanzen. Stattdessen sollten die empfohlenen Methoden verwendet werden: AddComponent(), Instantiate() oder Abrufen einer vorhandenen Instanz aus einem angehängten Skript.

Das obige ist der detaillierte Inhalt vonWarum gibt „neu' Null zurück, wenn eine von MonoBehaviour abgeleitete Klasse in Unity instanziiert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn