HiBe: Upside down

“…having the player *use* magnetic boots…”

Diese neue Levelmechanik von HiBe hatte ich schon sehr früh auf der Liste, aber ich wusste lange Zeit nicht genau, wie ich das umsetzen würde. Nachdem ich es nun einfach mal versucht hab, muss ich sagen:
Es war gar nicht so schwer. 🙂

Die Idee hinter der Mechanik ist den gesamten Raum zu drehen. Eine Alternative wäre gewesen, dem Spieler magnetische Stiefel anzuziehen und ihn an der Wand hochlaufen bzw. an der Decke entlanglaufen zu lassen. Hier wäre aber zum einen der Steuerungsablauf im PlayerController schwierig geworden und zum anderen hätte man nicht normal springen können. Außerdem erlaubt die Drehung des Raumes später auch ein paar nette Physikpuzzle.

Die Drehung wird durch zwei Events getriggert:

  1. Kollision mit einer Wand
    Hier habe ich einfach einen weiteren Collider (Capsule) an den Spieler geheftet, über den ich eine Kollision mit der Wand mitbekomme. Den bestehenden Collider des Spielers habe ich nicht verwendet, da ich die Kollision mit einer “Drehwand” früher mitbekommen möchte. Im Spiel sieht man, dass ich an eine normale Wand näher herantreten kann als an eine der Spezialwände. Dort setzt die Rotation schon früher ein.
    Die Kollision gibt mir die Zielnormale und damit habe ich schon alles, was ich braucht. Hier muss der Spieler nur noch in einem Winkel von kleiner als 45% (Velocity Vector) auf die Wand auftreffen.
  2. Laufen über eine Kante
    Diese Variante war etwas komplizierter, da ich hier in jedem Frame ein mal (oder mehrmals bei schneller Bewegung) Raycasts nach unten durchführen muss, um den Zeitpunkt zu erfassen, wenn der Spieler über eine Kante hinausläuft.
    Dann kommen Raycasts “um die ecke”, um die neue Standposition zu finden.
    Es folgt ein BoxCast, um zu checken, ob an der Zielposition Platz für den Spieler ist.
    Danach brauche ich nur noch einen Raycast von der Ursprungsposition zur Zielposition, um zu verhindern, dass der Spieler durch eine Wand (z.B. die Decke) rotiert.

In beiden Varianten wird dann die komplette Szene (alle root GameObjects) instant um den Ursprung rotiert. Danach wird der Spieler animiert von der Start- zur Zielposition bewegt.

Der Sound und die Animationsgeschwindigkeit ändert sich:
– Die erste Drehung ist die lauteste und langsamste, um dem Spieler klar zu machen, was passiert. Dies schließt einen Kommentar des Spielerchars ein.
– In den darauf folgenden 20 Drehungen nehmen Dauer und Lautstärke der Drehung kontinuierlich ab. Das soll verhindern, dass der Effekt auf Dauer zu nervig wird. (Hat mich am Ende irgendwie an den Waschweibfilter aus Simon the Sorcerer erinnert ^^)

 

Leave a Reply

Your email address will not be published. Required fields are marked *