Ваш вопрос очень двусмысленный, но я попытаюсь ответить.
Предполагая, что вы имеете в виду, как двигаться вперед и назад по списку patrolPoints
:
Определите свои переменные в верхней части скрипта.
//List of patrolpoints
public Transform[] patrolPoints;
//To go forwards or backwards
public bool forwards = true;
//Current position
public int currentPoint = 0;
Затем в вашей функции Update()
мы можем использовать код , который вы представили .
float moveSpeed = 5.0f;
transform.position = Vector3.MoveTowards(transform.position, patrolPoints[currentPoint].position, moveSpeed * Time.deltaTime);
Однако , нам нужен какой-то способ циклически проходитьэти позиции , поэтому после вашего предыдущего кода в Update()
, напишите
//Check if the agent has reached the patrol point
if(transform.position == patrolPoints[currentPoint].position)
{
//Check if going forwards and has not reached last patrol
if (forwards && currentPoint != patrolPoints.Length - 1)
currentPoint++;
//Check if going backwards and has not reached first patrol point
else if (!forwards && currentPoint != 0)
currentPoint--;
}
Затем измените логическое значение вперед и назад для перехода вперед и назад, В качестве альтернативы , если вы хотите сразу вернуться к начальной точке патрулирования, просто используйте код (в Update()
):
float moveSpeed = 5.0f;
transform.position = Vector3.MoveTowards(transform.position, patrolPoints[0].position, moveSpeed * Time.deltaTime);
, который использует 0
в качестве индекса.
Редактировать: если вы хотите, чтобы он достиг назад после достижения конца , просто переключите переменную вперед на false , когда currentPoint достигнет lastPoint. Следовательно, , функция update
будет иметь вид:
void Update()
{
float moveSpeed = 5.0f;
transform.position = Vector3.MoveTowards(transform.position, patrolPoints[currentPoint].position, moveSpeed * Time.deltaTime);
//Check if the agent has reached the patrol point
if(transform.position == patrolPoints[currentPoint].position)
{
//Check if going forwards and has not reached last patrol
if (forwards && currentPoint != patrolPoints.Length - 1)
currentPoint++;
//Check if going forwards and has reached the last patrol
if (forwards && currentPoint == patrolPoints.Length - 1)
forwards = false;
//Check if going backwards and has not reached first patrol point
else if (!forwards && currentPoint != 0)
currentPoint--;
//And to go back if reached back to the start
else if (!forwards && currentPoint == 0)
forwards = true;
}
}