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