【发布时间】:2017-03-03 01:24:20
【问题描述】:
我正在编写一个脚本,玩家可以在其中切换某些对象。如果玩家接触到物体,那么它就会被摧毁。我有一个列表中的所有对象,这些对象每秒更新一次,以检查是否有东西离开或添加到所述列表中。我目前在处理超出范围的错误时遇到问题,想知道是否有人可以提供帮助。在没有错误消息的情况下,如何正确检查列表中的索引项是否为空或无效?
这是错误:
ArgumentOutOfRangeException:参数超出范围。 参数名称:索引 System.Collections.Generic.List`1[UnityEngine.GameObject].get_Item(Int32 索引)(位于 /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/List.cs:633 ) TargetEnemy.SwitchTarget () (在 Assets/TargetEnemy.cs:39) TargetEnemy.Update () (在 Assets/TargetEnemy.cs:33)
这是我的脚本:
public int selectableTargets;
public int currentTarget;
public Rigidbody rb;
public bool lockedOn;
void Start ()
{
selectableTargets = LocateEnemy.enemyCount;
currentTarget = 500;
rb = GetComponent<Rigidbody>();
lockedOn = false;
}
// Update is called once per frame
void Update ()
{
selectableTargets = LocateEnemy.enemyCount;
if (currentTarget > selectableTargets || currentTarget < 0)
{
print("I cant find it");
}
else
SwitchTarget();
}
void SwitchTarget()
{
if(LocateEnemy.myTargets[currentTarget].gameObject != null)
rb.transform.LookAt(LocateEnemy.myTargets[currentTarget].gameObject.transform);
}
【问题讨论】:
-
不确定这是否与您当前的问题有关,但您的情况可能应该是
currentTarget >= selectableTargets- 请记住,数组使用基于 0 的索引,因此有效索引在 [0, length 范围内- 1]。否则,您的currentTarget可能偶尔会超出范围。 -
我爱你,这就是解决办法。非常感谢!
-
很高兴为您提供帮助!我已将评论扩展为答案,因此请在方便时通过单击旁边的复选标记随时接受它 - 这向所有人表明问题已成功解决。