И так, теперь объясним все текстом, ибо не все могут смотреть видео, может интернет слабый... Приступим?
Для начала мы объявили переменные, которые отвечают за массив контрольных точек, скорости движения и дистанцию, которая нужна для определения следующей точки, мы же должны когда-то достигнуть точку и лучше сделать это заранее, чтобы не было задержек. А также объявили приватную переменную для работы с текущей точкой.
Синтаксис:
Используется csharp
public Transform[] Points;
public float Speed = 0.0f, Distance = 0.0f;
private int _currentPoint;
public float Speed = 0.0f, Distance = 0.0f;
private int _currentPoint;
После чего мы сразу пишем условие, которое говорит системе: если я достиг конца точек, то я хочу начат заново;
Синтаксис:
Используется csharp
if (_currentPoint == Points.Length) _currentPoint = 0;
Создав локальную переменную и сказав, что она равна дистанции от текущей позиции объекта до нужной позиции нужной точки, то есть текущей
Синтаксис:
Используется csharp
float _currentDistance = Vector3.Distance(transform.position, Points[_currentPoint].position);
if (_currentDistance <= Distance) _currentPoint++;
if (_currentDistance <= Distance) _currentPoint++;
Мы обязаны проверит на дистанцию. То есть мы должны сравнить, если дистанция меньше указанной, то мы достигли точки и надо двигаться дальше, то есть делаем переменную текущей точки на 1 больше.
Наш объект должен всегда смотреть на точку, ибо не хорошо ходить попой или боком
Синтаксис:
Используется csharp
transform.LookAt (Points [_currentPoint].position);
А также теперь осталось дело за малым - научить двигаться игрока. Как это сделать? Просто берем и передвигаем объект от текущей позиции до позиции нужной точки и с определенной скоростью:
Синтаксис:
Используется csharp
transform.position = Vector3.MoveTowards (transform.position, Points[_currentPoint].position, Speed * Time.deltaTime);