Momentan simuliere ich physikalische Aufprallkräfte, um Einheiten lokal zu meiden, aber diese Methode drückt Einheiten manchmal aus der Formation und hat sehr unerwünschte Auswirkungen, wenn sich Einheiten zusammenballen.
Wie erfolgt die lokale Vermeidung bei RTS-Spielen wie Starcraft 2? Wird Physik simuliert oder entscheidet ein leistungsfähiger Controller, wo alles sein soll? Ich weiß, dass diese Frage ein wenig weit gefasst sein könnte, daher frage ich mich speziell, wie das lokale Vermeidungsverhalten von Starcraft 2 erreicht werden kann. obwohl alles, was funktioniert, sehr geschätzt wird.
Ich suche keinen Code - nur nützliche Ressourcen oder Erklärungen, wie Starcraft 2 (oder ähnliche Spiele) mit lokaler Vermeidung umgeht.
Derzeit habe ich Kollisionserkennung (mit Penetrationsvektor), Kollisionskräfte und Bewegung durch Geschwindigkeit implementiert. Jede Einheit wird auf Kollision gegen eine andere geprüft - wenn sie kollidiert, werden die Objekte sofort um den Eindringvektor versetzt, und die Kollisionskraft wird angewendet. Dann bewegt eine weitere Schleife die Objekte um ihre Geschwindigkeiten und wendet Drag auf die Geschwindigkeiten an. Der Versatz mindert das Problem übermäßiger Kollisionskräfte, die auf verklumpte Einheiten einwirken, aber die Einheiten schießen manchmal immer noch aus.
Die von mir gesuchte Lösung muss die folgenden Anforderungen erfüllen (wie in Starcraft 2):
- Objekte dürfen sich nicht überlappen. oder zumindest Überlappungen müssen eventuell behoben werden.
- Objekte schieben sich nicht mehr als nötig voneinander weg, damit 2 Einheiten in einer Formation nebeneinander stehen und sich bewegen können.
- Es sollte keine seltsamen Verhaltensweisen geben, wenn sich Objekte in Richtung des gleichen Ziels zusammenballen.
- Unterstützt Einheiten unterschiedlicher Größe und sogar unterschiedlicher konvexer Formen.
Bisher habe ich mir überlegt, nicht nach Kollisionen zu suchen, sondern nach zukünftigen Kollisionen zu suchen, damit die Überlappung nie auftritt. Wenden Sie dann die Beschränkung an und achten Sie darauf, dass sich die Geschwindigkeiten der beiden Einheiten nicht überlappen. Ich bastele immer noch an dem Algorithmus, um die Bewegung über die Überlappung hinaus einzuschränken.