Как заставить одного бота не попадаться на глаза второму
|
|
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 |
|
| |