Заставить объект двигаться назад / назад на массиве точек - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть игровой объект, который следует путевым точкам в порядке их индекса в массиве. Объект может перемещаться по всем путевым точкам, и он может делать 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. Если кто-нибудь может сказать мне, как заставить объект двигаться в почтении, это будет очень ценно ^^

...