在 Unity 中的导航代理脚本上出现错误.索引超出范围异常:数组索引超出范围

本文关键字:索引 范围 异常 数组 错误 导航 代理脚本 Unity | 更新日期: 2023-09-27 18:30:24

我收到错误" 索引超出范围异常:数组索引超出范围。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 ();
}
}

在 Unity 中的导航代理脚本上出现错误.索引超出范围异常:数组索引超出范围

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

可能异常发生在此行上。您应该初始化 myPathNodes。myPathNodes[navIndex]什么都不会

[SerializeField]
PathNode[] myPathNodes; //this will be null.

你需要考虑你的代码并回答一个问题。在开始游戏之前,您知道数组的最大大小吗?

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

PathNode[] myPathNodes = new  PathNode[maximumSize];

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

http://www.dotnetperls.com/list

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