Стекаются и окружают, а не уходят? - PullRequest
3 голосов
/ 02 сентября 2011

Есть ли примеры скопления, когда стадо окружает и поражает цель, а не рыбу, похожую на безумного кормления, где они нападают, а затем улетают?

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

Идеи? * * 1005

Ответы [ 3 ]

2 голосов
/ 02 сентября 2011

Насколько я понимаю, универсальное накопление генерируется средневзвешенным значением:

  • вектор выравнивания, который является средним из векторов выравнивания те, кто вокруг вас
  • вектор разделения, который является вектором, направленным в сторону от окружающих вас людей
  • вектор сцепления, который представляет собой вектор, указывающий на центр локальной группы

Существуют разные способы вычисления этих векторов, и различные варианты поведения приводят к тому, что им присваиваются разные веса. Существуют также различные способы объединения комбинированного вектора средневзвешенного значения с вектором текущей скорости.

Если я правильно прочитал ваш вопрос, вы бы хотели, чтобы ваша стая кружилась или вращалась вокруг центральной точки. Для этого вы создали четвертый вектор,

  • целевой вектор, который является вектором, направленным на конкретную точку назначения

Теперь вы, вероятно, можете видеть, куда это идет ... поведение вашей паствы - результат весов, размещенных на каждом векторе. Если вес, который вы поместили на целевой вектор, слишком мал по сравнению с остальными, ваше стадо будет сосредоточено на стаях, а не на атаке.

Поэтому, предполагая, что я правильно обрисовал флокирование, и вы запрограммировали вещи разумным образом, вы захотите попробовать разные комбинации весов, пока не найдете поведение, соответствующее вашим потребностям.

0 голосов
/ 02 сентября 2011

Один из способов сделать это - смоделировать «силы» на атакующих и позаимствовать некоторые методы из симуляции частиц. Если нападавшие привлечены к цели, это поведение можно смоделировать как «гравитацию» или как силу притяжения.

Вы также хотите препятствовать группированию. Обычно это делается при моделировании частиц (или в активных контурах / змеях в компьютерном зрении) с использованием пружин. Смоделируйте пружину, соединяющую двух ближайших атакующих. Если расстояние между атакующими больше, чем длина покоя пружины, то создается сила притяжения. Когда атакующие находятся слишком близко друг к другу (то есть короче, чем длина покоя), между двумя атакующими создается сила отталкивания.

Здесь - ссылка для моделирования пружины (с кодом C и т. Д.). Это представление PowerPoint - разумное обсуждение физического моделирования.

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

0 голосов
/ 02 сентября 2011

Создайте взвешенную функцию, которая берет расстояние до добычи, которую вы хотите держать рядом, с легкой атакой на расстоянии, стоимость за то, чтобы быть рядом с x ближайшими союзниками, и высокую стоимость за то, что слишком близко от добычи.

Если вы правильно уравновешиваете вещи, это должно создать хороший круг вокруг цели на оптимальном расстоянии.Затем, когда прибудет больше, самые близкие приблизятся немного к цели (в зависимости от параметров), и остальная часть стада сформируется вокруг начальной линии атакующих в равной степени.Просто добавьте немного случайности, чтобы это не выглядело как хореография, и это должно привести к тому стилю, который вы ищете.

PS.Вам, вероятно, понадобятся экспоненциальные факторы стоимости вместо линейных.

...