Пятница, 19 Апреля 2024, 14:47

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Как заставить одного бота не попадаться на глаза второму
Как заставить одного бота не попадаться на глаза второму
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Д среде.
тут попахивает чемпионатом команд-разработчиков таких ботов!! smile

ну а если сводить все к минимуму - то всегда есть Г-образная (V,П-образная) дуга захода за спину при известном векторе (и ширине) обзора врага - главное тут создать механизм этого определения (сектора обзора врага) и остальное просто -- по двум(трем) вейпоинтам ход конем! для пущего совершенства этого алгоритма - достаточно ввести оперативную корректировку - совпадает расчетный "Г" с текущим положением или нет. если да - продолжаем выполнять, иначе - строим новую "Г".


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Пятница, 16 Мая 2014, 20:21
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Как заставить одного бота не попадаться на глаза второму
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг