在Unity中的NavAgent脚本上出错。 IndexOutOfRangeException:数组索引超出范围

时间:2014-11-15 01:53:40

标签: c# arrays indexing unity3d

我收到错误" IndexOutOfRangeException:数组索引超出范围。 NavAgent.FindDestination()"我是C#的新手,我之前没有使用过数组 我不太确定我的问题是什么。

任何帮助将不胜感激,谢谢你提前!

这是我的完整剧本:

using UnityEngine;
using System.Collections;

public class NavAgent : MonoBehaviour {

NavMeshAgent myNavAgent;

[SerializeField]
PathNode[] myPathNodes;

int navIndex = 0;

// Use this for initialization
void Start () {
    myNavAgent = GetComponent ("NavMeshAgent") as NavMeshAgent;
    navIndex = 0;
    FindDestination ();
}

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

}

void FindDestination()
{
    Vector3 newTravelPosition = myPathNodes [navIndex].transform.position;

    myNavAgent.SetDestination (newTravelPosition);
}

void OnTriggerEnter()
{
    ++navIndex;

    if (navIndex >= myPathNodes.Length)
                    navIndex = 0;

    FindDestination ();
}
}

2 个答案:

答案 0 :(得分:0)

Vector3 newTravelPosition = myPathNodes [navIndex].transform.position;

这一行可能发生异常。您应该初始化myPathNodes。 myPathNodes[navIndex]

上没有任何内容
[SerializeField]
PathNode[] myPathNodes; //this will be null.

答案 1 :(得分:0)

您需要考虑您的代码并提出一个问题。在开始游戏之前你知道阵列的最大尺寸吗?

如果答案是肯定的,则需要像这样初始化数组:

PathNode[] myPathNodes = new  PathNode[maximumSize];

否则,我建议您使用list而不是array(因为列表大小是动态分配的),您可以在这里阅读有关C#列表的更多信息:

http://www.dotnetperls.com/list

如果您需要更多帮助,请随时发表评论:)