Интеграция A* pathfinding в скрипт AI

Программирование на Юнити.

Re: Интеграция A* pathfinding в скрипт AI

Сообщение Kann 16 дек 2009, 17:30

через пару тройку часов, как доберусь до домашнего компа я вам более подробно все распишу.
Kann
Старожил
 
Сообщения: 553
Зарегистрирован: 05 ноя 2009, 14:06

Re: Интеграция A* pathfinding в скрипт AI

Сообщение Slava 16 дек 2009, 17:39

ок!!
Добавить slava-1234 в Skype
Slava
UNIт
 
Сообщения: 135
Зарегистрирован: 05 апр 2009, 05:14

Re: Интеграция A* pathfinding в скрипт AI

Сообщение Kann 16 дек 2009, 20:32

И так, ну теперь еще раз для тех кто в танке по шагам :D
берем наш скрипт ИИ из Туториала.
в первую функцию Start добавляем
Код: Выделить всё
function Start () {
..............
while (true) {
      FindPoint (curpoint);
      yield WaitForSeconds (0.5);
   }
...............
}


далее копируем и вставляем после Start(), из демки ПП скрипта AI следующее, или прям отсюда могете скопировать.
Код: Выделить всё
function Update () {
   //Debug.color = Color.blue;
   Debug.DrawLine (transform.position, waypointPosition, Color.blue);
}
var points : Vector3[];
var curpoint = 0;
var PPatch;
PPatch = GetComponent ("Seeker");
function SetPoints (newPoints : Vector3[]) {
   points = newPoints;
   FindPoint (0);
   command = "Walk";
}

function FindPoint (cpoint : int) {
   curpoint = cpoint;
   if (!points || points.length == 0 || curpoint >= points.length) {   
      waypointPosition = transform.position;
      SearchPlayer(waypointPosition);
      return;
   }
   if (points.length == 1) {
      waypointPosition = points[0];
      command = "Walk";
      return;
   }
   command = "Walk";
   waypointPosition = points[curpoint];
   p = waypointPosition;
   p.y = transform.position.y;
   if (Vector3.Distance (transform.position,p) < dontComeCloserRange) {
      curpoint++;
   }
}


далее ищим у себя в ИИ функцию AttackPlayer и в ней ищем это if (distance > dontComeCloserRange) и меняем на то что ниже
Код: Выделить всё
if (distance > dontComeCloserRange)
         {
         PPatch.StartPath(PPatch.transform.position,target.transform.position);
            MoveTowards (waypointPosition);
         }else
            RotateTowards(lastVisiblePlayerPosition);


кроме скрипта с AI на нашем боте должен висеть скрипт Seeker
сохраняем и смотрим как наш бот бегает за нами уже по ПП, эта модификация минимальна, и тут есть лишее, но все что вам не нужно и что нужно уже добавите сами.
Kann
Старожил
 
Сообщения: 553
Зарегистрирован: 05 ноя 2009, 14:06

Re: Интеграция A* pathfinding в скрипт AI

Сообщение Slava 22 дек 2009, 11:03

Дело похоже в том, что этот патфайдинг работает в очень определенных условиях)). И главное - чтобы плэйер находился на сетке при старте. В общем, я сделал по другому - у меня поиск идет во всех состояниях - поменял переменную, теперь по вэйпойнтам тоже перемещается, и тут не надо ставить shoot range равной attack range, чтобы робот видел плэйера). В пакадже 3 файла - сценка House_fps с плэйером и вэйпойнтами, файл AI.js и скрипт вэйпойнтов.
У вас нет доступа для просмотра вложений в этом сообщении.
Добавить slava-1234 в Skype
Slava
UNIт
 
Сообщения: 135
Зарегистрирован: 05 апр 2009, 05:14

Re: Интеграция A* pathfinding в скрипт AI

Сообщение Kann 23 дек 2009, 13:31

какие условия зададите в таких он и будет работать, важно что бы в сетке были заранее учтены все обьекты статики, динамические объекты этот вариант А* не обрабатывает,(сделать можно но будут тормаза) для динамических объектов нужно применять другой метод, а куда у вас там чего бегает и нужен ли радиус атаки боту, это уже чисто ваша логика ИИ, у каждого она своя в зависимости от потребностей игры.
Kann
Старожил
 
Сообщения: 553
Зарегистрирован: 05 ноя 2009, 14:06

Пред.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 8