В даний час я моделюю сили впливу фізики для локального уникнення одиниць, але цей метод іноді виштовхує одиниці з формування та має дуже небажані ефекти, коли одиниці збиваються вгору.
Для таких ігор RTS, як Starcraft 2, як робиться місцеве уникнення? Фізика моделюється чи всебічний контролер вирішує, де все має бути? Я знаю, що це питання може бути трохи широким, тому я конкретно запитую, як досягти локальної поведінки уникнення Starcraft 2; хоча все, що працює, буде дуже вдячним.
Я не шукаю жодного коду - просто корисні ресурси або пояснення того, як Starcraft 2 (або подібні ігри) поводиться з місцевим уникненням.
На даний момент у мене реалізовано виявлення зіткнення (з вектором проникнення), сили зіткнення та рух за швидкістю. Кожен блок перевіряється на інше на предмет зіткнення - якщо вони стикаються, об'єкти негайно зміщуються вектором проникнення, тоді застосовується сила зіткнення. Потім інша петля переміщує об’єкти за їх швидкістю і застосовує перетягування до швидкостей. Зсув пом'якшує проблему надмірних зусиль зіткнення, застосованих на збірних блоках, але підрозділи все ще іноді вистрілюють.
Я шукаю рішення, щоб задовольнити наступні вимоги (як у Starcraft 2):
- Об'єкти не повинні перетинатися; або хоча б перекриття повинні бути врешті вирішені.
- Об'єкти не відштовхують один одного більше, ніж потрібно, тому 2 одиниці можуть стояти і рухатися поруч один з одним у формуванні.
- Не повинно бути ніяких дивних способів поведінки, коли об’єкти стискаються до одного місця призначення.
- Можуть підтримувати одиниці різних розмірів і навіть різної опуклої форми.
Те, про що я думав дотепер, це замість виявлення зіткнень, виявлення для майбутніх зіткнень, щоб перекриття ніколи не відбувалося. Потім застосуйте обмеження, переконавшись, що швидкості 2 одиниць не змушують їх перетинатися. Я все ще розмовляю з алгоритмом обмеження руху поза перекриттям.