Вторник, 03 Декабря 2024, 19:51

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [358]
Статьи об общих понятиях связанных с созданием игр.
Программирование [83]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [148]
Статьи о программах для создания игр, уроки и описания.
Софт [44]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [17]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [168]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [133]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Игры какого жанра вы предпочитаете делать?
Всего ответов: 14620
Главная » Статьи » Создание игр

Unity3D - WayPoints контроллер. Простой ИИ

И так, теперь объясним все текстом, ибо не все могут смотреть видео, может интернет слабый... Приступим?
Для начала мы объявили переменные, которые отвечают за массив контрольных точек, скорости движения и дистанцию, которая нужна для определения следующей точки, мы же должны когда-то достигнуть точку и лучше сделать это заранее, чтобы не было задержек. А также объявили приватную переменную для работы с текущей точкой.
Код
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 больше.
Наш объект должен всегда смотреть на точку, ибо не хорошо ходить попой или боком
Код
transform.LookAt (Points [_currentPoint].position);

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


Источник: КЛИК»
Категория: Создание игр | Добавил: mepihindeveloper (08 Декабря 2014)
Просмотров: 16913 | Комментарии: 5 | Рейтинг: 4.5/10 |
Теги: AI, WayPoint, Как создать игру, Unity3D, Искуственный Интеллект, контроллер, контрольные точки, Software, ИИ, Unity
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Unity3D - WayPoints контроллер. Простой ИИ», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 5
+0-
5 apexa   (16 Августа 2016 10:45) [Материал]
Такой вопрос. А как реализовать плавный разворот или поворот после достижения точки и следования на другую точку?
Все перепробовал что знал!

+1-
4 kot_11_22_   (13 Мая 2016 21:31) [Материал]
доброго времени суток, спасибо за урок он мне очень помог создать ии танка. у меня к вам небольшой вопросик.
В комментариях было написано вот это 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. заранее спасибо.

+0-
3 Stiv   (12 Октября 2015 20:45) [Материал]
StivРебят а вот такой вопрос, вот есть карта скажем шахматная доска, как осуществить управление персонажем по клеткам, что бы он переходил точно в центр клетки при нажатии мыши? и что бы был выбор ходить влево в право вперед и назад, скажем пошаговый режим! Плиз подскажите? cool

+1-
2 NEBR   (04 Апреля 2015 03:09) [Материал]
NEBRЕсли игра с 2д спрайтами, то
transform.LookAt (Points [_currentPoint].position);

нужно заменить на
Vector3 directionToPoint = Points[_currentPoint].position - tansform.position;
transform.up = Vector3.RotateTowards(transform.up, directionToPoint, Speed * Time.deltaTime, 0.0f);

тогда объект будет корректно поворачиваться к текущей точке, LookAt задействует все три измерения
На днях столкнулся с этим

+1-
1 alexsilent   (30 Декабря 2014 09:20) [Материал]
alexsilentСпасибо!

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Sprite Widget
  • Wii Game Studio
  • Apocalyx
  • Аперо
  • ReMooD
  • Tilengine
  • Retribution Engine
  • NetGore
  • GINCS Studio
  • Vizard
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг