Чи є простий спосіб зупинити ворогів на одному місці?


24

Отже: гра зверху вниз, мої вороги переслідують гравця, коли вони потрапляють на певну відстань, вони стоять на місці і стріляють. Якщо вони всі йдуть з одного і того ж напрямку, всі вони опиняються на одному місці (тобто стоять «усередині» один одного), оскільки я зараз не роблю виявлення зіткнень між ворогами - вони вільні переходити один одного.

Який простий спосіб зробити це? Або якась форма виявлення зіткнення чи якась аї?


1
Обмежте себе одним ворогом. : P
Kylotan

Відповіді:


18

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

Подивіться на "зграйку" для деяких простих способів поведінки.

Основна ідея полягає в тому, що речі повинні спрямовуватися до гравця, але подалі від тісної перешкоди (один одного, стіни, такі речі).


6
Це також називається boids. Про прості правила, пов’язані з боїдами, читайте тут: en.wikipedia.org/wiki/Boids. Для впровадження цих обмежень слід бути тривіальним.
Nailer

12

Ви можете надихнути себе на стихійну поведінку , наприклад, Boids .

Вони, як правило, складаються з 3-4 дуже простих правил, які при правильному застосуванні призводять до дуже задоволеної та "складної" поведінки.

У вашому випадку ви можете спробувати щось подібне:

  • Розмежування (мінімальні радіуси між ворогами)
  • Згуртованість (тому вони подорожують групами)
  • Вирівнювання (тому вони, як правило, рухаються в одному напрямку)
  • Орієнтовані (вони повинні мати тенденцію рухатися до гравця)

Це майже дослівна копія відповіді JasonD. Клянусь, я не дивився на це перед публікацією.
egarcia


3

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


Повне розкриття: майже впевнений, що я знайшов тут спільну дифузійну посилання десь у GD, але я не можу за все життя знайти посаду, яка стосується цього. Це була цілком знахідка. =)
орендувач

Це надзвичайно дивовижно, але я трохи більше складності, ніж мені потрібно. Буде читати посібник все одно, але вдалося реалізувати більш просте рішення.
Iain

2

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


2

На веб-сайті Крейга Рейнольда є кілька посилань на рульове та незграбне поведінку . Вони порівняно прості у виконанні, але можуть спричинити чудову поведінку.


Це по суті та сама відповідь, що й інші 2, але +1 за посиланням - Цей веб-сайт справді хороший посилання.
AShelly

1

Всі інші відповіді дають кращий результат, але найдешевший (?) Спосіб уникнути повного групування - це просто додати випадковий вектор, який, можливо, становить 25% від початкового обчисленого вектора руху, щоб об’єкти трохи відскакували в загальній групі . Це не захистить речі повністю одне від одного, але залежно від того, що ви намагаєтесь досягти, я вважаю, що це може бути адекватним. Об'єкти все ще можуть групуватися за допомогою цього методу, якщо ви запускаєте кола навколо них, але з часом вони мають тенденцію до розсіювання.

Ось невеличка гра, яку я зробив кілька років тому, яка демонструє цей метод: http://deleter.phatcode.net/index.php?page=projects&p=4


1

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

Наприклад, для демонстрації я, вбудованого в Unity, я використовував його команду Random.insideUnitSphere, щоб робити стікаючі пуфболи


+1 Я згоден, ще один приклад цієї стратегії (мабуть, трохи краща гарантія не перекриття) можна знайти тут: «Unclutter» підрозділи в грі RTS
MichaelHouse

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