У меня есть игровой объект, который следует путевым точкам в порядке их индекса в массиве. Объект может перемещаться по всем путевым точкам, и он может делать oop, где он перемещается от последней точки в массиве к первой. Я пытаюсь создать опцию, которая позволяет объекту двигаться в в обратном направлении . Например, перейти от точки 3 к точке 2 или перейти от первого индекса в массиве к последней точке. Сценарий выглядит следующим образом:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Patrol : MonoBehaviour
{
public float speed;
public Transform[] waypoints;
public bool isLooping;
public bool isReverse;
float waitTime = 0.3f;
int index = 0;
void Update()
{
if(index < waypoints.Length)
{
transform.position = Vector3.MoveTowards(transform.position, waypoints[index].position, speed * Time.deltaTime); //line 20
Debug.Log(index);
if (Vector3.Distance(transform.position, waypoints[index].position) < 0.2f)
{
if (waitTime <= 0)
{
index++;
}
else if (isReverse)
{
index--;
if (index == 0)
{
index = waypoints.Length;
}
}
else
{
waitTime -= Time.deltaTime;
}
}
}
else if(isLooping)
{
index = 0;
}
else if(isLooping && isReverse)
{
index = waypoints.Length;
}
else
{
return;
}
}
}
Всякий раз, когда значение isReverse bool помечается как истинное в инспекторе, объект перемещается только в первую точку массива, а затем останавливается. Это ошибка, которая появляется, когда это происходит:
IndexOutOfRangeException: индекс находился за пределами массива. Patrol.Update () (at Assets / Scripts / Patrol.cs: 20)
Когда isLooping помечен как true, а isReverse помечен как false, объект продолжает l oop. Если кто-нибудь может сказать мне, как заставить объект двигаться в почтении, это будет очень ценно ^^