Cтолкнулся с задачей поиска пути.Чтобы не велосипедить решил заюзать A* pathfinding project *. Плагин (даже в свободной форме меня вполне устраивает) очень гибко настраивается, можно в реальном времени сканировать пространство с получением графа, но возникла проблема:
охотники (красные кубы) охотятся за целью ( зеленый куб). Охотников может быть много. Я хочу, чтобы охотники обходили других охотников по A*, но если я вешаю ТЭГ на охотников как на препятствие, при построении графов под каждым охотником непроходимое место. Охотник не может найти путь до цели. Как быть? Что делать?
как бы вижу 2 пути: 1 хранить для каждого из охотников свой grid 2 модифицировать один грид выставляя узлам разный вес. (не ковырял еще нужно разобраться)
Если кто имел опыт решения такой задачи на сабже, поделитесь пожалуйста
- в А* Project есть пример где в гористой местности бегает бот и ездят два куба. там бот видит кубы и обходит их.. сорри не могу посмотреть сейчас детали реализации..
- и вот тут есть обсуждение точно такой же темы. Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
- в А* Project есть пример где в гористой местности бегает бот и ездят два куба. там бот видит кубы и обходит их.. сорри не могу посмотреть сейчас детали реализации..
Это легко делается. Но мне нужно, чтобы охотники обходили других охотников.
ЦитатаKamiRonin ()
- и вот тут есть обсуждение точно такой же темы.
здесь стандартный навмеш. мне он не подойдет, так как там присутствует проблема "сисек"
Сообщение отредактировал Ranger - Четверг, 30 Января 2014, 14:19
даа.. проблемы с "сиськами" это серьезно! мне кажется стоит в ИИ привнести немного интеллекта.. например проверку - если цель есть, а путь навмешАгент не нашел, тогда создавать флуктуации - отклонять точку таргета программно, просчитывать путь через нее и таким образом обходиться без "сисек".
в той теме что я дал - вроде были варианты как отлавливать столкновение двух ботов.. жаль в АПИ не предусмотрен дополнительный OnObstacleCollision метод... вот еще может подойдут идейки
но я думаю дело в идиологии формировании навмеша... ну не должно быть там ... "сисек"! Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
все таки я считаю что путь не должен считаться так, как будто другой агент - это препятствие. тут все таки лучше расширить алгоритм поведения до "вижу - обхожу", имхо. во второй ссылке есть все необходимое (сорри не пробовал, сужу по отзывам). Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Сообщение отредактировал KamiRonin - Пятница, 31 Января 2014, 09:07
KamiRonin, 1. читал я этот материал. он на стандартном pathfinding от юнити. я показывал на рисунке, почему это меня не устроило. 2. кроме как
ЦитатаKamiRonin ()
другой агент - это препятствие
сделать не получится. представь что у тебя пачка охотников забила основной проход к цели. тогда последние охотники должны найти обходной путь.. как здесь применить "вижу- обхожу" не представляю.
Добавлено (31.01.2014, 10:26) --------------------------------------------- Кароч... победил я ее.
если вкрадце каждый охотник, через определенные промежутки времени находит других охотников и выставяляет им layer препятствие. Всем кроме себя. и запускает на грффы на апдейт .
т.к. апдейт может идти несколько кадров, выставлен глобальный булевый флаг не допускающий параллельного апдейта. .
еще кое-что допилить нужно, но основная проблема решена.
Cheeeeeers!!!
Сообщение отредактировал Ranger - Понедельник, 03 Февраля 2014, 20:35
молоток!! "находит других охотников" - эт как раз "вижу обхожу"!
Добавлено (31.01.2014, 10:31) --------------------------------------------- доберусь до А* прож - свой вариант зашлю.. млин прям интуиция вопит что усложняешь..
Мыслю - значит программирую... Конструктивная критика - умных ведет к совершенству... Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
Сообщение отредактировал KamiRonin - Пятница, 31 Января 2014, 10:29
т.к. апдейт идет в фоне, самое сложное здесь было понять, какой метод какого класса вызывается по окончанию апдейта графа. надеюсь несколько часов ковыряния доков я читателям сэкономил.
Можешь сказать где ты его создавал? Я плохо разбираюсь в C и с классами. Я не понимаю где мне его нужно прописать и как оно выглядит , особенно если это не мой код
public static class StaticMainVarClass{ public static bool UpdateBusyFlag = false; /// у меня в этом классе еще много чего болтается, но тебе это не надо. }
это в отдельный скрипт. присоединять к объектам не надо. т.к. класс статический. просто положи в проект.
Удачи..
Сообщение отредактировал Ranger - Понедельник, 23 Июня 2014, 17:44