Ich arbeite an einem 3D-Kachel-basierten Spiel und ich benutze AABB Kollisionserkennung. Für jeden Würfel, den der Spieler schneidet, finde ich die Achse, entlang der der Spieler den Würfel am wenigsten schneidet, und schiebe den Spieler entlang dieser Achse aus dem Würfel.Sliding AABB Kollision - an den Kanten stecken
Abhängig von der Reihenfolge, in der die Würfel eingecheckt werden, kann dies zu Problemen beim Gleiten entlang der Kante mehrerer Würfel führen. Ich habe ein Diagramm erstellt, das das Problem erklären sollte:
- Pfeil # 1 ist die versuchte Bewegung des Spielers. Die anderen Pfeile sind die Kollisionsantwort.
- Im linken Diagramm wird die Kollision zuerst mit dem rechten Würfel getestet, wodurch der Spieler nach links und dann nach oben gedrückt wird. (bad)
- Im rechten Diagramm wird zuerst die Kollision gegen den linken Würfel getestet, wodurch der Spieler nach oben gedrückt wird, wobei der Spieler den anderen Würfel nicht mehr schneidet. (gut)
Irgendwelche Ideen, was der effizienteste Weg, um dies zu lösen sein könnte? Oder irgendwelche besseren Möglichkeiten, die Kollisionsreaktion zu behandeln?
Vielen Dank.
Vielleicht alle Kollisionen prüfen und notieren Sie die Zeit (oder Entfernung) des Kollision zu vermeiden. Wenden Sie nur die Kollision an, die am ehesten eintritt. Optional können Sie den Prozess für den Rest des Zeitschritts fortsetzen. –
Also, wenn ich alle Würfel, die der Spieler mit der Entfernung vom Spieler überschneidet, sortiert und dann nacheinander betrachtet, könnte das funktionieren. Ich denke, es wäre das Beste zu vermeiden, die Dinge in jedem Frame sortieren zu müssen, aber ich bin mir nicht sicher, dass es sehr wichtig wäre, da der Player nur mit bis zu 7 kollidieren könnte? Blöcke auf einmal. Denkst du, dass da etwas zu befürchten ist? – Jeff