2016-09-05 3 views
0
gesetzt

Nach der Ausführung des Codes folgende Ausnahme am Ende des Codes aufgetreten, habe ich eine Menge Änderungen im Code, aber nichts ändert sich überhaupt.NullReferenceException: Objektreferenz nicht auf eine Instanz eines Objekts in C#

NullReferenceException: Object reference not set to an instance of an object RocketController.Start() (at Assets/Script/RocketController.cs:10)

Was ist die Ursache dieser Ausnahme?

using UnityEngine; 
using System.Collections; 

public class RocketController : MonoBehaviour { 

// Use this for initialization 
Rigidbody2D rd; 
void Start() { 

    rd.GetComponent<Rigidbody2D>(); 
} 

// Update is called once per frame 
void Update() { 

    if(Input.GetKey("right")) 
    { 
     rd.velocity = new Vector2(1,0); 
    } 
    else if(Input.GetKey("left")) 
    { 
     rd.velocity = new Vector2(-1,0); 
    } 
    else 
    { 
     rd.velocity = new Vector2(0,0); 
    } 


    }//close update 
} 
+0

Ist 'rd' jemals instanziiert? Es scheint immer Null in Ihrem Code zu sein, also wird 'rd.anything' diese Ausnahme auslösen. – Andrew

+1

Die Ironie des Kommentars '// Benutze dies zur Initialisierung' direkt über dem Problem. :) –

+0

Sie haben sich getäuscht, wie GetComponent funktioniert, müssen Sie das vom Controller aufrufen und es dem Feld rd zuweisen, nicht aus dem Nullfeld anrufen – MikeT

Antwort

2

UPDATE: Hier arbeitet Code:

using UnityEngine; 
using System.Collections; 

[RequireComponent(typeof(Rigidbody2D))] 
public class RocketController : MonoBehaviour { 

// Use this for initialization 
Rigidbody2D rd; 
void Start() { 

    rd = GetComponent<Rigidbody2D>(); 
} 

// Update is called once per frame 
void Update() { 

    if(rd == null) 
     return; 
    if(Input.GetKey("right")) 
    { 
     rd.velocity = new Vector2(1,0); 
    } 
    else if(Input.GetKey("left")) 
    { 
     rd.velocity = new Vector2(-1,0); 
    } 
    else 
    { 
     rd.velocity = new Vector2(0,0); 
    } 


    }//close update 
} 
+0

Oberhalb der Klassendefinition vordefinieren habe ich diesen Fehler: Attribut 'RequireComponent' ist nicht gültig für diesen Deklarationstyp. Es gilt nur für "Klassen" -Deklarationen. – user3662189

+0

@ user3662189 Ich schätze, Sie haben es nicht an der richtigen Stelle geschrieben, ich habe meine Antwort aktualisiert. überprüfen Sie es –

+0

Dieser Code funktioniert nicht ich einfach nur kopieren und einfügen, aber es funktioniert überhaupt nicht - hier ist der Wiederholungsfehler: NullReferenceException: Objektreferenz nicht auf eine Instanz eines Objekts – user3662189

1

Die Variable rd wird nie instanziiert, so dass es null ist. Sie müssen es instanziieren, bevor Sie es verwenden können.

Ein NullReferenceException bedeutet, dass das, was Sie versuchen zu arbeiten, null ist.

Die Art und Weise einen starren Körper in Unity zu instanziiert, um es wie folgt lautet: rd = GetComponent<Rigidbody2D>(); More info

+0

Genau so funktioniert die Initialisierung in Unity. Entweder Sie weisen eine Komponente dem Inspektor zu. oder Sie verwenden 'GetComponent'. OP verwendet "GetComponent" nur falsch. –

+0

Ich habe es geändert, aber es bleibt gleich wie zuvor MissingComponentException: Es ist kein 'Rigidbody2D' an das Spielobjekt "rocket" angehängt, aber ein Skript versucht, darauf zuzugreifen. Sie müssen wahrscheinlich eine Rigidbody2D zum Spielobjekt "Rakete" hinzufügen. – user3662189

+0

@ user3662189 Das bedeutet, dass das Objekt, an das das Skript angehängt ist, kein 'Rigidbody2D' hat, also müssen Sie ein Objekt hinzufügen oder' Rigidbody2D' nicht verwenden. –

Verwandte Themen