2016-04-01 7 views
0

Ich bin ein Newby in Unity und ich folge dem first Unity tutorial. Wenn ich versuche, mein erstes Skript auszuführen bekomme ich diesen Fehler:Einheit: bekomme NullReferenceException mit Javascript

NullReferenceException: Object reference not set to an instance of an object

Hier mein Skript ist:

#pragma strict 
private var rb:Rigidbody; 
private var player:GameObject; 

function start() { 
    player = GameObject.Find("Player"); 
    rb = player.GetComponent(Rigidbody); 
} 

function FixedUpdate() { 
    var moveHorizontal:float = Input.GetAxis("Horizontal"); 
    var moveVertical:float = Input.GetAxis("Vertical"); 

    var movement:Vector3 = new Vector3(moveHorizontal , 0.0f , moveVertical); 
    rb.AddForce(movement); 
} 

ich keine Ahnung habe, was mache ich falsch.

UPDATE:

Hier ist meine Szene:

enter image description here

UPDATE: Ich habe in beiden Funktionen setzen zu drucken und es scheint, wie start nicht aufgerufen werden an all, und deshalb wird meine Variable nicht initialisiert. Irgendeine Idee?

+0

Das hat nichts mit JavaScript zu tun hat. Du hast wahrscheinlich UnityScript gemeint. Aus einigen verwirrenden Gründen werben sie es als JavaScript und verwenden '.js' Dateierweiterung, aber UnityScript unterscheidet sich erheblich von JS. –

Antwort

0

Also endlich nach ein paar Stunden, habe ich es. Das Problem war, dass start Funktion sollte Großbuchstaben Start sein. Da es Kleinbuchstaben war, wurde es nicht aufgerufen und rb wurde nicht initialisiert.

Und hier ist das letzte Skript:

#pragma strict 
private var rb:Rigidbody; 


function Start() { 
    rb = GetComponent(Rigidbody); 
} 

function FixedUpdate() { 
    var moveHorizontal:float = Input.GetAxis("Horizontal"); 
    var moveVertical:float = Input.GetAxis("Vertical"); 

    var movement:Vector3 = new Vector3(moveHorizontal , 0.0f , moveVertical); 
    rb.AddForce(movement); 
} 
1

Es Ihre Gameobject scheint nicht Starrkörperkomponente mit ihm verbunden hat und variable rb ist null nach rb = GetComponent(Rigidbody);

+0

Ich habe es verstanden, das Problem ist, wie löse ich es? – Tomer

+0

Ihr Rigidbody scheint in Ordnung zu sein. Sie müssen kein Spieler-Spielobjekt finden, denn dieses Skript gehört bereits dazu. loswerden von 'player = GameObject.Find (" Player ");' und versuchen Sie 'rb = gameObject.GetComponent (Rigidbody);' und setzen Sie den Debug-Code direkt danach: 'print (rb == true);' um zu sehen, ob Du findest den Starrkörper. – izeed

+0

versuchte es, der gleiche Fehler. – Tomer

3

ich die Erklärung

private var rb:Rigidbody; 

entfernen würde, weil es scheint, dass Ihr Skript zuzugreifen versucht der deklarierte Rigidbody (der immer noch nicht initialisiert ist, also null ist) und nicht der reale Gegenstand.

Exkurs: scheint, dass von Unity 5.3.3, was Sie tun müssen:

player.GetComponent.<Rigidbody>(); 

(von here)

+0

'private var rb: Rigidbody;' ist nur eine Deklaration der Variablen, in der Startmethode initialisiere ich sie. Ich habe versucht, Sie Vorschlag und immer noch den gleichen Fehler :( – Tomer

1

Sie sollten auch die Vorteile von "Unity Weg" nehmen Variablen zu referenzieren . Ich meine, Ihr Player und Ihre rb-Attribute müssen öffentlich sein, und Sie ziehen einfach Ihr Spielobjekt von der Hierarchie in Ihr Attribut auf dem Inspektor hinein.

Wenn Sie es noch aus einem guten Grund privat machen möchten, ändern Sie einfach player = GameObject.Find("Player"); für player = GameObject.FindWithTag("Player"); und Ihre Nullreferenz wird wahrscheinlich gelöst werden.

+0

Versuchte es, der gleiche Fehler. – Tomer

Verwandte Themen