所以我试着让一个游戏对象在三个点之间来回移动,这在C#中是统一的,我在统一检查器中分配了3个游戏对象,我希望enamy GameObject在这些点之间来回移动像巡逻一样。问题是我得到一个超出范围的索引错误。为什么这样,我该如何解决? 对不起可能出现的恶作剧。
这是我的代码:
public class Enamy2 : MonoBehaviour {
public Transform[] pointPosition;
public float enamySpeed;
private int currentPoint;
private bool backTracking = false;
// Use this for initialization
void Start () {
transform.position = pointPosition [0].position;
currentPoint = 0;
}
// Update is called once per frame
void Update () {
if (transform.position == pointPosition[currentPoint].position) {
if (backTracking)
currentPoint--;
else
currentPoint++;
}
if(currentPoint >= pointPosition.Length) {
backTracking = true;
}
transform.position = Vector3.MoveTowards (transform.position, pointPosition [currentPoint].position, Time.deltaTime * enamySpeed);
}
}
答案 0 :(得分:1)
您的currentPoint
变得太大了。你甚至检查过:
if(currentPoint >= pointPosition.Length) {
backTracking = true;
}
但除了将backTracking
设置为true
之外,您不会对此做任何事情,而在下一行中您使用的是pointPosition[currentPoint]
。如果它大于或等于pointPosition.Length
,则超出范围。
答案 1 :(得分:1)
IndexOutOfRangeException
在两种情况下发生:索引太大或太小。您不能在C#中使用否定索引器。你有这个:
if(currentPoint >= pointPosition.Length) {
backTracking = true;
currentPoint = pointPosition.Length - 1;
}
现在你需要在之后直接添加:
if(currentPoint <= 0) {
backTracking = false;
currentPoint = 0;
}
将currentPoint
钳位到边界位置的附加线确保在调用下一行之前它在边界内。
此时如果你得到一个IndexOutOfRangeException
,那就是因为pointPosition []是空的并且没有元素。