Як реалізувати групові утворення в 3D RTS?


14

Мені вдалося влаштувати роботу з пошуку маршрутів для однієї одиниці, і мені вдалося уникнути зіткнення агента-агента, але тепер мені потрібно мати можливість відправити групу агентів до якогось місця.

Це моя наразі:

  • Визначення контуру
  • Мінімальна відстань між двома вузлами трохи більша, ніж найбільший радіус обмеження сфери, дозволений для агента.
  • Агенти уникають зіткнень з іншими агентами, виконуючи деяку поведінку керівництва, що базується на чіткому шляху

Тому зараз мені потрібно відправити своїх агентів кудись у групу. Я прочитав деякі пости, в яких говорилося, що певний спосіб зробити це - створити керівника групи та дати іншим підрозділам зміщення його посади.

Але тоді проблема полягає в тому, що якщо групового формування неможливо досягти? наприклад, ви хочете сформувати прямокутник, але в цільовому положенні поруч є структура, яка не дозволяє створити налаштування прямокутника.


2
Я на роботі, тому я не встигаю скласти належну відповідь, але ось два мої нульові точки два центи: Використовуйте алгоритм стикання Boids, а потім представляйте перешкоди як об'єкти, з яких відбиті Boids.
Nailer

@Nailer він алгоритм стекання працює до тих пір, поки вони рухаються, але як тоді я визначити, чи є їх кінцеве положення "нормальним", і повідомити їх, що вони можуть перестати рухатися? Не хвилюйтесь, я можу дочекатися вашої відповіді;)
xcrypt

Відповіді:


13

Насправді є гарна стаття про це в Гамасутре. І висвітлює такі теми, як формування та вирішення колізій:

введіть тут опис зображення

І ще одна стаття з них на ту саму тему, яка трохи коротша, але має більше прикладів псевдокоду:

введіть тут опис зображення

Нарешті, чудова річ, над якою слід задуматися при впровадженні вашої системи, - це ідея «Польового потоку», який використовував Верховний командувач 2 ; І це засновано на дослідженні Crowd Flows Crowd Flow з Університету штату Вашингтон .


Дякую, я бачив, як безперервний натовп проглядає речі від верховного командира, але я думаю, я буду дотримуватися того, що в мене є. Я спробую це, коли отримаю трохи більше досвіду, бо так, це виглядає справді
чудово

2

Я думаю, що ви можете мати невидиму «зграйну сутність», яка є начальником формування, і зробити так, щоб інші істоти позиціонували себе відносно цієї сутності. Якщо ця сутність може обертатися, то і відносна позиція також буде обертатися.

... oopos .. ти вже це робиш.

Як що до цього:

Чому ви не можете розраховувати нові позиції для суб'єктів, що стикаються? Мені не потрібно бути фантазійним, можливо, просто намалюйте лінію з потрібної початкової точки та лідера, і перенесіть потрібну позицію на середину цього рядка. Знову перевірити на зіткнення.


Ну це майже те, що я сказав у своєму запитанні: D Хитра частина полягає в тому, як впоратися зіткненням пласта з місцевістю / перешкодами / спорудами
xcrypt

Вибачте !, я оновив свою відповідь новою ідеєю.
Тей

Я не розумію, ви б просто вдвічі зменшити величину зміщення вектора і продовжувати перевіряти, чи це позиція без зіткнення? Це, швидше за все, провалиться у багатьох випадках
xcrypt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.