Страница 1 из 1

Самая простая рализация ИИ по точкам.

СообщениеДобавлено: 11 дек 2014, 00:48
T I N T A F

И так, теперь объясним все текстом, ибо не все могут смотреть видео, может интернет слабый... Приступим?
Для начала мы объявили переменные, которые отвечают за массив контрольных точек, скорости движения и дистанцию, которая нужна для определения следующей точки, мы же должны когда-то достигнуть точку и лучше сделать это заранее, чтобы не было задержек. А также объявили приватную переменную для работы с текущей точкой.
Синтаксис:
Используется csharp
public Transform[] Points;
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++;

Мы обязаны проверит на дистанцию. То есть мы должны сравнить, если дистанция меньше указанной, то мы достигли точки и надо двигаться дальше, то есть делаем переменную текущей точки на 1 больше.
Наш объект должен всегда смотреть на точку, ибо не хорошо ходить попой или боком
Синтаксис:
Используется csharp
transform.LookAt (Points [_currentPoint].position);

А также теперь осталось дело за малым - научить двигаться игрока. Как это сделать? Просто берем и передвигаем объект от текущей позиции до позиции нужной точки и с определенной скоростью:
Синтаксис:
Используется csharp
transform.position = Vector3.MoveTowards (transform.position, Points[_currentPoint].position, Speed * Time.deltaTime);

Re: Самая простая рализация ИИ по точкам.

СообщениеДобавлено: 11 дек 2014, 04:11
bwolf88
Делал подобную штуку, только с более сложной логикой и рандомным выбором своего пути.

К слову, объявляя точки трансформами, а не векторами вы теряете в скорости доступа почти 20 раз. Вейпоинты статичные и не изменяют своего положения, лучше перевести их позицию в векторы.
И еще зачем вы выключаете флаг при смене точки, чтобы на следующей итерации снова его включить ? Лишняя операция :).
ТАк же если смена точки будет происходить чуть ранее позиции целевой, а поворот объекта будет через Lerp, то вы получите более сглаженное и естественное передвижение.