Расстановка юнитов.
|
|
sinoptis | Дата: Суббота, 22 Июня 2013, 19:32 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Доброго времени суток, форумчане. В общем столкнулся с небольшой проблемой при использовании A* PathFinding. Необходимо сделать расстановку юнитов на равном расстоянии от точки клика, как во многих RTS, выбираешь кучку юнитов, выбираешь точку куда им идти и они выстраиваются ровными рядами.Что-то вроде этого: (звездочка место - клика, кружки - юниты) Сделать это не трудно, но проблема в том, что есть непроходимые места, где юниты стоять не могут. И необходимо расставлять их с учетом этого фактора. Как здесь:(зеленая область - проходимая, красная - нет) (Простите за мои каракули ) Направьте на путь, как это реализовать, желательно без navMesha'a , но можно с сеткой графов.
|
|
| |
robertono | Дата: Суббота, 22 Июня 2013, 20:14 | Сообщение # 2 |
Чокнутый Кот
Сейчас нет на сайте
| Например при клике проверять ТЕГ. Сделайте тег например isWalk или любой другой, и наложите этот тег на тот материал или модель куда можно кликнуть и пойти. А там где (например тот же красный квадрат) где нету тега isWalk то туда пойти неполучиться.
|
|
| |
allods | Дата: Суббота, 22 Июня 2013, 22:04 | Сообщение # 3 |
почти ветеран
Сейчас нет на сайте
| Я пытался сделать RTS типа WarCraft, сделал много, юниты атаковали умирали строились добывали ресурсы агрились выбирали ближнюю цель, если цель отойдет то переключается на другую ближнею но забил так как при 30 юнитах которые сражаются фпс падал до 10, долго парился, думал как пофиксить так и не нашел выхода. Я знаю что проблема была в Выборе целей, уж сильно толсто было и жирно, но другую написать не смог.
Удачи тебе
|
|
| |
sinoptis | Дата: Воскресенье, 23 Июня 2013, 00:06 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| allods, Спасибо , но у меня вроде выбор юнитов изящно получился. robertono, Спасибо за совет, но мне нужно немного не то. На картинках показаны места где могут стоять юниты и мне нужно их ровно расставить, программно. И если точка куда должен будет бежать юнит будет в непроходимой области, то переместить ее в проходимую, но при условии что все точки должны быть на равном расстоянии. Недавно видел на Хабре реализацию поведения стаи птиц, попробую разобраться с исходником, у меня появились пару идей на этот счет. Прощу прощения, что неясно истолковал проблему.
|
|
| |
Tiendil | Дата: Воскресенье, 23 Июня 2013, 00:56 | Сообщение # 5 |
участник
Сейчас нет на сайте
| Если требуется только чтобы сохранялось расстояние между юнитами, а сохранять построение не надо, то всё очень просто:
1. Заранее готовим структуру со списком доступных точек для случая, когда препятствий нет. Точки берём с запасом. 2. Накладываем её на то место, куда должны придти юниты. 3. Исключаем точки, которые попали в непроходимую область. 4. Из оставшихся точек выбираем N ближайших к центру и направляем в них юниты.
Участвовал в разработке Order of War (C++ UI & логика) и WoT (Python портал worldoftanks.ru почти всё :-) )
Текущий проект: the-tale.org - indie mmozpg
|
|
| |
sinoptis | Дата: Вторник, 25 Июня 2013, 15:16 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| Tiendil, Спасибо, я как раз хотел сделать именно так
Добавлено (25.06.2013, 15:16) --------------------------------------------- Вот, что получилось. Управление: ЛКМ - выделение юнитов рамкой или едининичным кликом ПКМ - указание точки движения для выделенных юнитов (точки подсвечиваются для наглядности )
Сообщение отредактировал sinoptis - Вторник, 25 Июня 2013, 15:23 |
|
| |
KVinS | Дата: Четверг, 27 Июня 2013, 11:24 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
|
Игра про лесных котов
|
|
| |
sinoptis | Дата: Четверг, 27 Июня 2013, 12:39 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| Уже пофиксил. И немного переделал расстановку точек, теперь они ставятся всегда корректно.
|
|
| |
romgerman | Дата: Четверг, 27 Июня 2013, 12:56 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| sinoptis, если зажать правую кнопку мыши, то юнити будут бежать на месте (если они уже стоят на своих местах).
|
|
| |
sinoptis | Дата: Четверг, 27 Июня 2013, 13:10 | Сообщение # 10 |
почетный гость
Сейчас нет на сайте
| Они пытаются бежать к той точке куда вы жмете. Вы жмете в одну и ту же точку, они пытаются до нее добежать. Так как я сделал расстановку точек другим способом, о чем писал выше, эта проблема отсутствует.
|
|
| |
allods | Дата: Четверг, 27 Июня 2013, 16:54 | Сообщение # 11 |
почти ветеран
Сейчас нет на сайте
| Мне интересно как сделать в A* PathFinding чтоб юниты обходили других юнитов но при этом не бегали багнуто из за того что стараются обойти сами себя? Я вешаю лэйер Обстакл на юнитов.
|
|
| |
sinoptis | Дата: Четверг, 27 Июня 2013, 23:25 | Сообщение # 12 |
почетный гость
Сейчас нет на сайте
| Можно делать обновление сетки графов после того как юнит остановится, но так как эта сетка может быть очень большой, в зависимости от размеров карты и плотности нодов, то это будет плохо сказываться на производительности, особенно если будет много юнитов. Можно еще написать небольшой AI, который будет вычислять обходной путь. А если вы имеете в виду ситуацию, когда юнит добегает до своей точки, но продолжает бежать к ней, то это легко исправить изменением переменной Target Riched и Pick Nexp Waypoint Distance (если вы используете AIFollow), они у меня стоят 1 и 2 соответственно.
|
|
| |
allods | Дата: Пятница, 28 Июня 2013, 13:54 | Сообщение # 13 |
почти ветеран
Сейчас нет на сайте
| Нет я имею в иду не то. Чтобы юнит обежал Обстакл я ему ставлю layer нужный и в настройках A* PathFinding говорю что этот layer нужно обойти. Чтоб юнит обходил других юнитов а не тупо упирался в него я тоже вешаю на него другой layer и в настройках говорю чтоб он его тоже обходил, проблема в том, что по скольку она весит на всех юнитах то каждй юнит старается обойти себя самого и ходит зигзагами
|
|
| |
sinoptis | Дата: Пятница, 28 Июня 2013, 16:50 | Сообщение # 14 |
почетный гость
Сейчас нет на сайте
| Интересно . Попробуйте на время движения юнита переключать ему слой. Правда не знаю, как это скажется на производительности. Поставил всем своим юнитам layer obstacle, бегают немного "непрямо", но бегают и всеравно врезаются в других. Возможно у вас в скрипте стоит обновление сетки в каждом кадре?
|
|
| |
allods | Дата: Пятница, 28 Июня 2013, 17:33 | Сообщение # 15 |
почти ветеран
Сейчас нет на сайте
| Я сделал обновление каждые 1 сек. Чтоб уж совсем не бежали друг в дружку как бараны
|
|
| |
sinoptis | Дата: Пятница, 28 Июня 2013, 17:55 | Сообщение # 16 |
почетный гость
Сейчас нет на сайте
| Ну остается только написать AI. Без обновления сетки.
|
|
| |
allods | Дата: Пятница, 28 Июня 2013, 17:59 | Сообщение # 17 |
почти ветеран
Сейчас нет на сайте
| Можно юнитам в овремя движения отключать Colision тогда он будет норм идти, а когда в тригер будет попадать юнит то включать для расчета нового пути
|
|
| |
sinoptis | Дата: Пятница, 28 Июня 2013, 18:18 | Сообщение # 18 |
почетный гость
Сейчас нет на сайте
| Если на юнитах чарактер контроллер, то это приведет к тому, что юнит провалиться и станет не контролируемым. Если же сфера или ещё что-то, то тоже будет проваливаться. Пробовал динамически обновлять сетку - бесполезная вещь.
|
|
| |
allods | Дата: Пятница, 28 Июня 2013, 21:01 | Сообщение # 19 |
почти ветеран
Сейчас нет на сайте
| для движения и колижиона чарактер контроллер а для обстакла вешать еще и бокс коллайдер
|
|
| |
sinoptis | Дата: Пятница, 28 Июня 2013, 22:30 | Сообщение # 20 |
почетный гость
Сейчас нет на сайте
| Вот обновленная версия. Вроде не так врезаются друг в друга. Web Demo
|
|
| |