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