In diesem Artikel erfährst du, wie man mit Hilfe von Raycasts eine saubere Kollisionsabfrage für einen Character erstellt. Auf die Frage warum es sinnvoll sein kann seinen 2D Character Controller selbst zu coden bin ich bereits Hier eingegangen.
Warum Raycasts ?
Eigentlich könnte man unter Unity Kollisionsabfragen auch mit Hilfe von Collidern realisieren. Warum also Raycasts verwenden, deren Implementierung auf den ersten Blick deutlich aufwändiger wirkt?
Collider sind leicht zu handhaben, sie liefern einen Rückgabewert wenn sie etwas berühren und wissen auch was sie berühren. Wo genau diese Berührungen stattfinden lässt sich mit ihnen leider nicht so einfach feststellen. Mit Raycasts hingegen kann man Berührungen an jeder beliebigen Position abfragen. So lässt sich beispielsweise auch leicht das Greifen und Hochziehen an Kanten umsetzen.
Was ist eigentlich ein Raycast ?
Kurz erklärt und ohne auf Details einzugehen: Ein Raycast ist eine Linie von einem bestimmten Punkt zu einem anderen bestimmten Punkt. Kollidiert diese Linie mit einem Objekt, liefert der Raycast einen Rückgabewert. Eine Technik (egal ob 2D oder 3D ), die in nahezu jedem Videospiel zur Anwendung kommt.
Wie viele Raycast’s braucht man ?
Nach oben und unten empfiehlt sich jeweils ein Minimum von 3 Raycasts. Einen auf jeder Seite (um beispielsweise auf Kanten stehen zu können) und einen weiteren in der Mitte (z.B. um auf kleinen Plattformen stehen zu können).
Seitlich sollten 3 Raycasts in Blickrichtung ausreichen. Wenn die Spielfigur die Richtung wechselt, ändert sich automatisch auch die Blickrichtung der Raycasts. Mit diesem Kniff lassen sich ganze 3 Raycasts einsparen. Auf schwächeren mobilen Endgeräten kann sich dies positiv auf die Framerate auswirken.
Collider Probleme
Will man seine Spielfigur mit Raycasts und einem Collider ausstatten, trifft man schnell auf ein Problem: Die Raycasts der Spielfigur reagieren auf den eigenen Collider und nichts funktioniert mehr. Für dieses Problem findet man im Netz eine Menge komplizierte Lösungen und eine Einfache: Weise deine Spielfigur einfach dem Layer “Ignore Raycast” hinzu.
Tipps
Tipp1: Raycasts und Physics immer über “FixedUpdate” aufrufen.
Tipp2: Wenn du mit Raycasts arbeitest, verwende “Continuos Collision Dedection”. Das kostet zwar etwas mehr Rechenleisung, erspart dir aber eine Menge an Problemen.
Tipp3: Das Debugging ist deutlich leichter, wenn du die Raycasts sichtbar machst.
Die Belohnung
Wie du wahrscheinlich schon bemerkt hast, ist das Erstellen eines eigenen 2D Charakter Controller alles andere als einfach, wenn man nicht auf vorgefertigte Hilfsmittel zurückgreifen will. Der Lohn für die Mühe ist hoch. Man bekommt dafür nicht nur eine voll angepasste individuelle Steuerung, sondern erhält auch jede Menge neuer Erkenntnisse und Programmier-Skills.
Kein Ende in Sicht
Nachdem du die Kollisionsabfrage mittels Raycasts erfolgreich umgesetzt hast, folgt die nächste Erkenntnis: So ganz ohne Physik fühlt sich das Verhalten deiner Spielfigur nicht besonders gut an. Wie du das ändern kannst verrate ich dir in einem anderen Artikel.
Du hast noch ein paar Tipps auf Lager oder komplett andere Lösungsansätze? Dann hämmere es bitte unten in die Kommentare.