0

Unity 3D で FPS ゲームを開発中にエラーが発生しました

NullReferenceException: オブジェクト参照がオブジェクト Node.OnDrawGizmos () のインスタンスに設定されていません (Assets/Node.cs:14)

以前は正常に機能していましたが、ノードにレイヤーを追加すると、このエラーが発生しました。

完全なコードでチェックアウト

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Node : MonoBehaviour {

public List<GameObject> neighours = new List<GameObject>();

public float nodeRadius = 50.0f;
public LayerMask nodeLayerMask;
public LayerMask collisionLayerMask;

public GameObject goal;

void OnDrawGizmos() {

    Gizmos.DrawWireCube(transform.position, Vector3.one);

    foreach(GameObject neighbor in neighbors) {

        Gizmos.DrawLine(transform.position, neighbor.transform.position);
        Gizmos.DrawWireSphere(neighbor.transform.position, 0.25f);
    }

    if(goal) {

        GameObject current = gameObject;
        Stack<GameObject> path = DijkstraAlgorithm.Dijkstra(GameObject.FindGameObjectsWithTag("Node"), gameObject, goal);

        foreach(GameObject obj in path) {

            Gizmos.DrawSphere(obj.transform.position, 1.0f);
            Gizmos.color = Color.green;
            Gizmos.DrawLine(current.transform.position, obj.transform.position);
            current = obj;
        }
    }
}

[ContextMenu ("Connect Node to Neighours")]
void findNeighours() {

    neighours.Clear();
    Collider[] cols = Physics.OverlapSphere(transform.position, nodeRadius, nodeLayerMask);

    foreach(Collider node in cols) {

        if(node.gameObject != gameObject) {


        }
    }
}

}

4

1 に答える 1

0

findNeighoursフィードではないneighoursので、次のようなものが必要だと思います。

foreach (Collider node in cols) {
    if (node.gameObject != gameObject)
        neighours.Add (node.gameObject);
}

についてOnDrawGizmos、アイテムを保持している可能性がpathあります。そうであるかどうかを確認し、なぜそれがいっぱいになっているのかを確認する必要があります。おそらく、シーン内のゲームオブジェクトを削除すると (および を使用して更新しないと)、参照が保持される可能性があることに注意してください。neighoursnullnullfindNeighoursnull

を定義しているかどうかを確認しますgoal

注: 隣人というのは隣人のことですか?

于 2013-03-29T10:26:22.350 に答える