| Как заставить одного бота не попадаться на глаза второму | 
|  | 
| 
| DantorS | Дата: Четверг, 15 Мая 2014, 18:51 | Сообщение # 1 |  |   заслуженный участник Сейчас нет на сайте | Всем привет! Делаю игру с элементами стелс. Хочу сделать то что есть во многих тактических шутерах. Т.е. у меня есть ГГ, союзники,противники. Союзниками можно давать команды. Как заставить бота (союзника) подойти к спине (не попадая в поле зрения бота-врага) бота (противника)?
 Практически тоже самое что в игре last of us. Только там союзник перебегает от укрытия к укрытия, не попадая в поле зрения врага.
 
 Я думал о таком варианте:
 Берём бота-врага. Пускаем рэйкаст от крачней правой точки (в данном случае - это руки) до конца стены. Определяем растояние рэйкаста. Тоже самое делаем слева. Определяем растояние между 2 рэйкастами. Складываем все три расстояния (1 рэйкаст, 2 рэйкаст и расстояние между рэйкастами). Мы получили расстояние между стенами (справа-слева). Также определяем расстояние от пола до потолка. Генерируем невидимый бокс (длину и высоту мы знаем, ширину можем задать скриптом). В результате получается что бокс мешает движению ИИ. Можно поставить условие, что если бот-союзник (идёт - пройти нельзя), если бот-враг - пройти можно.(колизия вкл/выкл) Но возникает проблемка если оба бота входят одновременно и бот-враг и бот-союзник. Я имею ввиду если стоит один бот-враг, второй бот-враг и бот-союзник входят в бокс
 
 
 Сообщение отредактировал DantorS - Четверг, 15 Мая 2014, 18:59 |  |  |  |  | 
| 
| Ranger | Дата: Четверг, 15 Мая 2014, 19:00 | Сообщение # 2 |  |   почти ветеран Сейчас нет на сайте | Цитата DantorS (  ) В результате получается что бокс мешает движению ИИ.В итоге твой бот тупо уткнется в коллайдер, а не будет пытаться зайти за спину.
 а если 2й бот врага подойдет??
 может получиться 2 пересекающихся коллайдера. Физика заглючит.
 
 
   |  |  |  |  | 
| 
| DantorS | Дата: Четверг, 15 Мая 2014, 19:11 | Сообщение # 3 |  |   заслуженный участник Сейчас нет на сайте | Цитата Ranger (  ) а если 2й бот врага подойдет?? может получиться 2 пересекающихся коллайдера. Физика заглючит.
Я об этом и говорю. Написал в последних 2 предложениях.
 
 Цитата Ranger (  ) В итоге твой бот тупо уткнется в коллайдер, а не будет пытаться зайти за спину. Нет он будет искать обходной путь. Бокс по сути станет невидимой стеной.
 Добавлено (15.05.2014, 19:11)---------------------------------------------
 Сделать всё динамическим - для меня не проблема
 |  |  |  |  | 
| 
| Ranger | Дата: Четверг, 15 Мая 2014, 19:11 | Сообщение # 4 |  |   почти ветеран Сейчас нет на сайте | Здесь нужно бить поле сеткой и выставлять веса проходимости аналитикой, считая FOV ботов. потом боты должны двигаться по этой сетке. (кароче нормальный pathfinding)
 А физ коллайдеры пользовать здесь, мне кажется, беспонт.
 
 
   |  |  |  |  | 
| 
| DantorS | Дата: Четверг, 15 Мая 2014, 19:13 | Сообщение # 5 |  |   заслуженный участник Сейчас нет на сайте | Цитата Ranger (  ) Здесь нужно бить поле сеткой и выставлять веса проходимости аналитикой, считая FOV ботов. Что это значит?
 |  |  |  |  | 
| 
| Ranger | Дата: Четверг, 15 Мая 2014, 19:18 | Сообщение # 6 |  |   почти ветеран Сейчас нет на сайте | необходимо создать сетку узлов наложенную сверху на карту. Бот имеет угол зрения. при помощи тригонометрии (сходу формулу не напишу, но это 5й класс школы) определяется находится ли узел с данными координатами внутри треугольника зрения бота.
 в итоге получаем 2х мерный массив проходимости. по нему уже можно строить маршрут
 
 Так примерно:
 Mathf.atan2((Уузла-Убота)/(Хузла - Хбота)) = угол альфа.
 альфа дб больше а+(уголзрения бота)/2 или меньше а-(уголзрения бота)/2
 если да, то узел за пределами угла зрения.
 
 
   
 
 Сообщение отредактировал Ranger - Четверг, 15 Мая 2014, 19:21 |  |  |  |  | 
| 
| DantorS | Дата: Четверг, 15 Мая 2014, 19:24 | Сообщение # 7 |  |   заслуженный участник Сейчас нет на сайте | Что это даёт и как может помочь в решении моего вопроса? Добавлено (15.05.2014, 19:24)---------------------------------------------
 Кажется дошло
 |  |  |  |  | 
| 
| Ranger | Дата: Четверг, 15 Мая 2014, 19:25 | Сообщение # 8 |  |   почти ветеран Сейчас нет на сайте | Чем конкретно помочь?? 
 Я сказал, как делать. А уже дальше думай сам.
 Вот ссылка про поиск пути http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_A*
 
 
   
 
 Сообщение отредактировал Ranger - Четверг, 15 Мая 2014, 19:26 |  |  |  |  | 
| 
| DantorS | Дата: Четверг, 15 Мая 2014, 19:26 | Сообщение # 9 |  |   заслуженный участник Сейчас нет на сайте | Нет, не сразу понял что это и зачем это нужно |  |  |  |  | 
| 
| Ranger | Дата: Четверг, 15 Мая 2014, 19:27 | Сообщение # 10 |  |   почти ветеран Сейчас нет на сайте | Я мог там со знаками накосячить в формуле.. сам просмотри 
 
   |  |  |  |  | 
| 
| falcoware | Дата: Четверг, 15 Мая 2014, 19:43 | Сообщение # 11 |  |   старожил Сейчас нет на сайте | DantorS, "Как заставить одного бота не попадаться на глаза второму"? 
 Я предлагаю закрыть или выколоть одному боту глаза! =)
 |  |  |  |  | 
| 
| KamiRonin | Дата: Пятница, 16 Мая 2014, 10:13 | Сообщение # 12 |  | почти ветеран Сейчас нет на сайте | DantorS, я бы (чтоб не мучаться с 2D сетками) - просто каждому врагу повесил бы коллайдер обозначающий зону спины (или наоборот - его обзора - как нравится).. дальше такой алгоритм - увидел твой бот врага на пути (получил с ним хит рейкастом), значит может получить доступ к колайдеру спины врага. и дальше вектор вычисляется куда оно смотрит, а там уже иди под этот (или вокруг него при лицевом коллайдере) вектор. алгоритм удержания своей позиции в зоне невидимости немного сложнее. особенно на пересеченной местности, с препятствиями и подалгоритмами "укрыться, когда ...", "обогнуть в _противоположную_ от динамики обзора врага сторону", "ускориться, чтобы попасть в паузу между циклами обзора врага", "множественные перекрестные линии обзора врага", "активность при обнаружении" и тп и тд и прочая и прочая...
 каждый из алгоритмов этого ии - отдельная песня.
 
 было бы здорово собрать клуб любителей разрабатывать ИИ и сообща создать такого ниньзю, который автономно прошел бы за спину охраннику и чик по горлу. причем в любой заданной 3Д среде.
 тут попахивает чемпионатом команд-разработчиков таких ботов!!
   
 ну а если сводить все к минимуму - то всегда есть Г-образная (V,П-образная) дуга захода за спину при известном векторе (и ширине) обзора врага - главное тут создать механизм этого определения (сектора обзора врага) и остальное просто -- по двум(трем) вейпоинтам ход конем! для пущего совершенства этого алгоритма - достаточно ввести оперативную корректировку - совпадает расчетный "Г" с текущим положением или нет. если да - продолжаем выполнять, иначе - строим новую "Г".
 
 Мыслю - значит программирую...
 Конструктивная критика - умных ведет к совершенству...
 Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
 
 
 Сообщение отредактировал KamiRonin - Пятница, 16 Мая 2014, 20:21 |  |  |  |  |