2016-12-14 15 views
-3

私は統一でゲームを作ろうとしており、スクリプトはC#にあります。資産/ Enemy.csで オブジェクトEnemy.Update(のインスタンスに設定されていないオブジェクト参照)(::35私はノードNullReferenceException 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の方に私のオブジェクトの移動を行うとき、私はこのエラーを持っています)ここにエラーがあります。

+2

まあ '場合(targetPathNode = NULL)' 'でなければなりません(targetPathNode == null)のŁukaszMotyczkaうん@' –

+1

場合。そのとおり。これはtypo – Programmer

+0

@amandとして閉じられるべきであり、ナンバリングがないので、どの行が35番目であるかを指摘してください。それは将来的に役立つかもしれない。 –

答えて

2

変更この:この

if (targetPathNode == null) { 

Unityへ

if (targetPathNode = null) { 

は、オブジェクトがnullの場合はfalseを返します==!=演算子をオーバーロードしています。あなたの声明がしていることは次のとおりです。

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

null値を割り当てているため、これはfalseになります。

しかし!これは次の行のためにあなたに例外を与えました:

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

そしてもう一度。そのオブジェクト(あなたが意図的に無効にしている)が無効化されていないと仮定しています。この行の前に、targetPathNodeに何らかの値(0x00以外を含むか、nullとすることができます)が100%確実に含まれている必要があります。あなたのコードの残りの部分で判断すると、単純なreturnキーワードで十分です。例:

if (!targetPathNode) return; 

Vector3 dir = targetPathNode.position - this.transform.localPosition; 
関連する問題