Menu
CoddyTech

Der Parcours

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 48 von 56.

In diesem Kapitel erstellen wir einen 3D-Plattformer. Du läufst und springst über schwebende Plattformen, fährst auf einer gleitenden Plattform mit, berührst Kontrollpunkte, damit dich ein Sturz nicht zum Start zurückschickt, sammelst Edelsteine, die auf dem Bildschirm gezählt werden, überquerst die Ziellinie zum nächsten Level und versuchst, deine Bestzeit zu schlagen. Das Spiel besteht aus fünf Skripten, die von Anfang an im Projekt vorhanden sind: Player, MovingPlatform, Checkpoint, Gem und FinishLine. Die letzten vier sind vorerst leer, und in jeder Lektion wird eines davon ausgefüllt. Der Spieler ist ein CharacterController, der mit den Aktionen des Input Systems gesteuert wird. Die Kamera ist sein untergeordnetes Objekt und folgt ihm daher ohne Skript.

Ein CharacterController bewegt sich auf zwei Arten. Move(motion) bewegt ihn um eine Strecke und fügt nichts hinzu. Daher sind Gravitation, Sprünge und Time.deltaTime Aufgabe des Skripts, wie im Kapitel „Character Controller“. SimpleMove(speed) erwartet eine Geschwindigkeit in Einheiten pro Sekunde, skaliert sie selbst mit der Zeit des Frames und fügt Gravitation hinzu. Der übergebene y-Wert wird ignoriert. Eine damit bewegte Figur fällt also von Vorsprüngen, kann aber niemals springen. Dieser Schäferhund in einem von oben betrachteten Hüte-Spiel muss nicht springen, daher bilden SimpleMove und die Move-Aktion sein gesamtes Skript:

using UnityEngine;
using UnityEngine.InputSystem;

public class Sheepdog : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    private CharacterController controller;
    private InputAction moveAction;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        moveAction = InputSystem.actions.FindAction("Move");
    }

    void Update()
    {
        Vector2 input = moveAction.ReadValue<Vector2>();
        controller.SimpleMove(new Vector3(input.x, 0f, input.y) * speed);
    }
}

Der Spieler im Plattformer muss springen können. Deshalb verwaltet er seine vertikale Geschwindigkeit selbst und bewegt sich mit Move. Dabei liest er die Aktionen Move und Jump, statt die Klasse Input zu verwenden. Unity empfiehlt, pro Frame Move oder SimpleMove genau einmal aufzurufen: Das Laufen und das Fallen fließen in denselben Aufruf ein, und isGrounded beschreibt dann die gesamte Bewegung.

challenge icon

Aufgabe

Mittel

Beginne den Plattformer mit dem Spieler. Das Player-Skript hat speed (5), jumpHeight (1.5) und gravity (-9.81), den controller und eine velocity für den Fall. Ermittle die Aktionen Move und Jump einmal in Start und in Update:

  • Move bewegt den Spieler mit speed Einheiten pro Sekunde: rechts und links entlang der x-Achse, vorwärts und rückwärts entlang der z-Achse.
  • Die Schwerkraft addiert in jedem Frame gravity * Time.deltaTime zu velocity.y. Solange der Controller Bodenkontakt hat und velocity.y unter 0 liegt, setze zuerst velocity.y auf -2, damit der Spieler auf den Boden gedrückt bleibt.
  • Jeder Druck auf Jump setzt, solange der Spieler Bodenkontakt hat, velocity.y auf Mathf.Sqrt(jumpHeight * -2f * gravity): einen Sprung jumpHeight Einheiten hoch. Wenn du Jump gedrückt hältst, springst du einmal, und Sprünge in der Luft sind nicht möglich.
  • Rufe controller.Move einmal auf, mit der Gehbewegung und velocity zusammen, multipliziert mit Time.deltaTime.

Drücke Play und springe zu den ersten Plattformen hinüber, dann klicke auf Check.

Probier es selbst

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
    [SerializeField] private float speed = 5f;
    [SerializeField] private float jumpHeight = 1.5f;
    [SerializeField] private float gravity = -9.81f;

    private CharacterController controller;
    private Vector3 velocity;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        // Mit der Move-Aktion laufen, mit der Jump-Aktion springen und durch die Schwerkraft fallen
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Echte Spiele entwickeln