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