2016-12-14 2 views
-3

Ich versuche, Spiel in Einheit zu machen und Skripte sind in C#. Ich habe diesen Fehler, wenn ich mein Objekt Bewegung in Richtung der KnotenNullReferenceException Unity

using UnityEngine; 
using System.Collections; 

public class Enemy : MonoBehaviour { 

    GameObject pathGO; 

    Transform targetPathNode; 
    int pathNodeIndex = 0; 

    float speed = 5f; 

    public int health = 1; 

    // Use this for initialization 
    void Start() { 
     pathGO = GameObject.Find ("Path"); 
    } 

    void GetNextPathNode(){ 
     targetPathNode = pathGO.transform.GetChild (pathNodeIndex); 
     pathNodeIndex++; 
    } 

    // Update is called once per frame 
    void Update() { 
     if (targetPathNode = null) { 
      GetNextPathNode(); 
      if (targetPathNode == null) { 
       // We've run out of path 
       ReachedGoal(); 
      } 
     } 

     Vector3 dir = targetPathNode.position - this.transform.localPosition; 

     float distThisFrame = speed * Time.deltaTime; 

     if (dir.magnitude <= distThisFrame) { 
      // We reached the node 
      targetPathNode = null; 
     } 
     else { 
      // Move towards the node 
      transform.Translate(dir.normalized * distThisFrame); 
      //Quaternion targetRotation = Quaternion.LookRotation (dir); 
      this.transform.rotation = Quaternion.LookRotation (dir); //Quaternion.Lerp (this.transform.rotation, targetRotation, Time.deltaTime); 
     } 
    } 

    void ReachedGoal(){ 
     Destroy (gameObject); 
    } 
} 

Nullreferenceexception machen: Objektverweis nicht auf eine Instanz eines Objekts Enemy.Update gesetzt() (bei Aktiva/Enemy.cs: 35) Hier ist der Fehler. diese

+2

Nun 'if (targetPathNode = null)' sollte 'if (targetPathNode == null)' –

+1

@ ŁukaszMotyczka Yup. Stimmt. Dies sollte als Tippfehler – Programmer

+0

@am geschlossen werden und bitte zeigen Sie, welche Zeile 35 ist, da es keine Nummerierung gibt. Es könnte in der Zukunft helfen. –

Antwort

2

Wechsel:

if (targetPathNode = null) { 

dieser

if (targetPathNode == null) { 

Einheit hat die == und != Betreiber überlastet, die falsch zurück, wenn das Objekt null ist. So grundlegend was Ihre Aussage tut, ist:

if ((targetPathNode = null) != null) { 

welches falsch sein wird, weil Sie Nullwert ihm zuweisen.

Aber! Dies gab Ihnen immer noch Ausnahmen wegen der nächsten Zeile, die lautet:

Vector3 dir = targetPathNode.position - this.transform.localPosition; 

Und noch einmal. Sie nehmen an, dass das Objekt (das Sie absichtlich ungültig machen) nicht ungültig gemacht wird. Vor dieser Zeile sollten Sie 100% sicher sein, dass Ihr targetPathNode einen Wert enthält (anders als 0x00 oder Sie können es null nennen). Nach dem Rest des Codes zu urteilen, sollte das einfache Schlüsselwort return ausreichen. Beispiel:

if (!targetPathNode) return; 

Vector3 dir = targetPathNode.position - this.transform.localPosition; 
Verwandte Themen