Ein Character Controller ist ein Script, dass dafür sorgt, dass dein Charakter sich bewegt. Damit deine Figur sich bewegt, benötigst du ein Script, dass deinem Character Controller sagt, was er machen soll.
Du benötigst zuerst ein Asset, aus dem Asset Store. Deine Spielfigur besitzt einen Sprite Renderer. Zudem brauchst du die Main Camera und verschiedene Tiles, die deinen Level zusammenbauen. Die Plattformen sollten mit Colliders versehen sein. Außerdem sollte ein Collider für den Boden vorhanden sein und einige Hintergrundgrafiken.
Zuerst benötigst du einen Character Controller. Diesen fügst du in Unity in einen Ordner deiner Wahl ein. Wähle den Spieler und füge dort das Script hinzu.
Das sieht dann folgendermaßen aus:
Hier lassen sich verschiedene Einstellungen zum Charakter vornehmen. Du hast die Möglichkeit die Sprungkraft einzustellen, die Duckgeschwindigkeit in Form der „Crouch Speed“, sowie die Bewegungsgeschmeidigkeit. Achte darauf, die Air Control zu aktivieren. Über die Option „What is Ground“ legst du die Oberfläche fest, auf der dein Charakter läuft. Wähle hier beispielsweise alles aus und entferne dann den Player. Wähle oben rechts als Layer den Player aus.
Dann gibt es drei weitere leere Plätze:
Ground Check: Es wird überprüft, ob die Spielfigur auf dem Boden steht.
Ceiling Check: Wenn du dich duckst, wird geprüft, ob eine Decke über deinem Kopf ist
Um die Checks möglich zu machen, benötigst du leere Objekte, die feststellen, wo sich was befindet. Erstelle über Create –> Empty Object ein erstes Objekt und kopiere es mit Strg+D. Bewege die jeweiligen Objekte zum obersten Abschnitt der Figur sowie zum unteren Abschnitt. Benenne das obere Objekt Ceiling Check und das untere Objekt mir Ground Check.
Ziehe diese in die jeweiligen Slots des Players.
Füge als nächstes einen Rigidbody 2D hinzu, um deinem Charakter Physik hinzufügen.
Dein Charakter sollte eine höhere Gravitation haben, als die anderen Spieleobjekte. Steigere also die Gravitation auf beispielsweise 3.
Zudem sollte dein Charakter immer gerade sein und nicht rotieren. Wähle deshalb Constraints und lege die Rotation auf der Z-Achse fest.
Als nächstes benötigt deine Figur einen Collider, da sie sonst durch den Bildschirm einfach durchfällt. Entsprechend der Figur kannst du mit verschiedenen Collidern arbeiten. Das kann zudem zu einem realistischeren Gefühl im Spiel führen. Du kannst beispelsweise Kreiscollider und Boxcollider verwenden. Du hast die Möglichkeit einen Kreiscollider hinzuzufügen. Passe zuerst den Boxcollder an und füge den Kreiscollider hinzu bzw. passe diesen an.
Jetzt kannst du dein PlayerMovement Script hinzufügen:
Gehe auf Add Component–> Geben PlayerMovement ein und wähle New Script sowie Create and Add.
Doppelklicke darauf, um es im Visual Studio zu öffnen.
Sollte das Script ausgegraut sein, gehe mit der rechten Maustaste oben auf Inspector und wähle den Debug-Mode. Dann kannst du das Dokument mit dem Visual Studio öffnen.
Das Ganze sieht jetzt so aus:
Zuerst wird eine Referenz vom PlayerMovement-Script zum Character Controller benötigt. Damit teilst du diese mit, was mit dem Charakter passieren soll.
Du benötigst folgende Zeile:
public CharacterController2D controller;
Dann erscheint im Player Movement Script der Character Controller 2D:
Dort kannst du dein Character Controller Script per Drag & Drop hineinziehen.
Würdest du unter void Update ( ) {
controller.Move( ); schreiben, würdest du dem System sagen, dass deine Figur sich bewegen soll.
Das reicht aber nicht aus. Du musst spezifizieren wo deine Figur sich bewegen soll, ebenso die Richtung und die Geschwindigkeit. Dafür ist die Steuerung des Spielers notwendig. Deswegen fügst du folgendes hinzu:
Für das Input vom Spieler benötigst du die Input-Class:
Input.GetAxosRaw („Horizontal“)
Der Wert liegt in der Regel zwischen -1 und 1. Das ist abhängig vom Userinput.
Der Linke Pfeil oder die A-Taste steht für -1.
Der Rechte Pfeil oder D steht für 1.
Das trifft auch auf den Controller zu.
Du benötigst außerdem den Debug.Log-Befehl:
Dieser Debug.log-Befehl sendet eine Nachricht an die Konsole.
Am Ende sieht die Zeile folgendermaßen aus:
Debug.Log(Input.GetAxisRaw(„Horizontal“));
Die Konsole reagiert auf die neue Eingabe. Drückst du die Pfeiltasten in die jeweiligen Richtungen, zeigt die Konsole Folgendes:
Das Script sieht jetzt folgendermaßen aus:
Dadurch registriert das System die Eingabe.
Der nächste Aspekt den wir benötigen ist das Fixed Update. Mit dieser Eingabe aktualisiert der Computer den Bilschirm mit jedem Frame.
Du benötigst die folgende Eingabe:
void FixedUpdate ( )
{
//Move our character
}
Dieser Abschnitt sorgt für die Übertragung des Spielerinputs auf den Charakter.
void Start kannst du löschen.
Damit hast du folgendes Script:
Der Userinput muss von einer Funktion zur anderen übertragen werden. Dafür benötigst du eine Variable.
Du benötigst folgende Zeile:
float horizontalMove = 0f;
Anschließend soll der Charakter bewegt werden. Du schreibst deswegen under FixedUpdate folgendes:
controller.Move(horizontalMove);
Mit der Variable (horizontalMove) gibst du an, wie stark die Figur bewegt werden soll.
Zudem musst du dem System sagen, dass der Charakter sich nicht gerade ducken oder springen soll.
Das erste false bezieht sich auf das Ducken und das zweite false auf das Springen.
controller.Move(horizontalMove, false, false);
Jetzt wird die Geschwindigkeit benötigt:
public float runSpeed = 40f;
Jetzt multiplizierst du das Horizontal Input mit der runSpeed.
horizontalMove = Input.GetAxisRaw(„Horizontal“) * runSpeed;
Auch das FixedUpdate muss mit der Time.fixedDeltaTime multipliziert werden:
controller.Move(horizontalMove * Time.fixedDeltaTime, false, false);
Die Funktion bestimmt, dass die Bewegung immer im gleichen Wert festgelegt ist.
Dein fertiges Script für die Bewegung sieht so aus:
Fixed Update bedeutet, dass die Funktion unzählige Male aufgerufen werden kann, ohne das es ein anderes Ergebnis gibt.
Wenn die Figur fällt, verschiebt sie sich kurz auf den Boden. Um dies zu beseitigen, wähle von der Figur den Rigidbody 2D und ändere die Collision Detection von Discrete zu Continuous. Diese Umstellung bewirkt, dass die Figur nicht in den Boden hineinrutscht.
Das Springen
Jetzt wird das Springen hinzugefügt. Das System muss die Figur zum Springen bringen, wenn du einen bestimmten Knopf drückst.
Du benötigst folgende Zeile:
if (Input. GetButtonDown(„Jump))
Diese Informationen müssen jetzt auch in den FixedUpdate-Bereich übertragen werden. Dafür benötigst du eine Variable.
Dafür benötigst du einen Booleschen Operator. Das bedeutet, das Ergebnis kann nur wahr (true) oder falsch (false) sein:
bool jump = false;
Dazu kommt die Bedingungen, dass der Jump-Knopf gedrückt werden muss, damit der Charakter springt.
Also muss zur Bedingungen hinzugefügt werden, dass:
jump = true;
Die Jump-Variable wird beim Fixed-Update-Bereich hinzugefügt. Wird die Taste nicht gedrückt, soll der Charakter nicht mehr hüpfen. Also wird im Fixed-Update-Berich noch jump = false; hinzugefügt.
Das Script sieht folgendermaßen aus:
Jetzt springt deine Figur.
Damit deine Figur beim Springen nicht an Plattformen hängen bleibt, sondern glatt heruntergleitet, benötigst du Physik-Material.
Wähle dafür im Projektfenster Create–>Physics Material 2D
Folgende Einstellungen stehen zur Verfügung:
Setze Friction und Bounciness auf 0.
Wähle den Spieler und ziehe das Physics Material in den Material-Slot vom Collider.
Verwendest du mehr Collider, füge auch beim anderen Collider dies hinzu.
Wie dein Charakter sich duckt
Die Eingaben für die Charakterbewegungen findest du in den Projekteinstellungen von Unity.
Wähle dem Anschnitt fürs Springen und klicke mit der rechten Maustaste auf „Jump“. Wähle Duplicate Array Element.
Damit erschaffst du eine weitere Eingabemöglichkeit für das Ducken (Crouching) deines Charakters.
Die Tastaturbelegung lässt sich eine alternative Taste definieren. Dabei handelt es sich um den Alt Positive Button bzw. den alternativen Positive Button.
Das Ducken muss jetzt im Script mit eingearbeitet werden:
Im Updatebereich: if (Input.GetButtonDown(„Crouch“))
Auch ein boolscher Faktor muss hinzugefügt werden:
bool crouch = false;
Im Bereich Fixed Update wird Crouch ergänzt.
Das Ducken funktioniert nicht genauso wie das Springen. Deine Figur soll sich nicht kurz ducken und dann damit aufhören. Das ducken soll beendet werden, wenn die Taste für das Ducken losgelassen wird. Dein Charakter soll sich nur ducken, wenn du die Taste gedrückt hältst.
Jetzt benötigst du folgende Zeile:
else if (Input.GetButtonUp(„Crouch“))
{
crouch = false;
Du sagst dem System damit, dass deine Figur sich nicht duckt, wenn du keine Taste drückst.
Jetzt wird noch nichts passieren, wenn du die Taste fürs Ducken drückst, da das Ducken durch eine Animation geschieht.
Damit das Ducken funktioniert, wähle den Collider deiner Figur und ziehe ihn in den Crouch Disable Collider.
Damit wird das Ducken für deine Figur möglich. Jetzt passt dein Charakter zwischen zwei Ebenen durch. Für das Ducken benötigst du jedoch noch eine Animation.
Originally posted 2020-04-16 21:22:43.