Menu
CoddyTech

Dorthin bewegen, wohin du schaust

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

Wenn die Kamera den Spieler aus einem Winkel betrachtet, sollten die Pfeile den Spieler so bewegen, wie es auf dem Bildschirm aussieht: Nach oben geht er von der Kamera weg, nach rechts geht er nach rechts aus Sicht der Kamera. Die Achsen der Welt bewirken das nur, wenn die Kamera entlang +z schaut. Erzeuge die Bewegung also aus den Richtungen der Kamera selbst: cam.forward und cam.right.

Zuerst müssen sie bereinigt werden. Eine Kamera, die von oben auf den Spieler schaut, hat ein forward, das in den Boden zeigt. Setze also y auf 0, damit nur der Anteil entlang des Bodens übrig bleibt. Dieser ist kürzer als 1, etwa 0.87 bei einer um 30 Grad nach unten geneigten Kamera. Der Spieler würde also langsamer gehen, deshalb normalisierst du ihn. Dieser Walker folgt der Hauptkamera, die auf eine Ecke des Levels schaut:

Transform cam = Camera.main.transform;

Vector3 forward = cam.forward;
forward.y = 0f;
forward.Normalize();
Vector3 right = cam.right;
right.y = 0f;
right.Normalize();

Vector3 move = forward * Input.GetAxisRaw("Vertical") + right * Input.GetAxisRaw("Horizontal");
if (move.magnitude > 1f) move.Normalize();   // diagonale Bewegungen sind nicht schneller
controller.Move(move * speed * Time.deltaTime);

Camera.main ist die Kamera mit dem Tag MainCamera. Die beiden Richtungen werden in jedem Frame ausgelesen, damit die Steuerung auch dann stimmt, wenn sich die Kamera dreht. Nach oben und rechts zusammen addiert ergeben zwei Einheitsvektoren im rechten Winkel, die zusammen etwa 1.41 lang sind. Deshalb wird die Bewegung normalisiert, wenn sie länger als 1 ist.

challenge icon

Aufgabe

Mittel

Die Kamera kreist langsam um den Spieler (CameraRig.cs, bereit), sodass sich die Achsen der Welt auf dem Bildschirm weiterdrehen. Sorge dafür, dass die Pfeiltasten den Spieler relativ zur Kamera bewegen, und zwar in Mover.cs, wo die Schwerkraft bereits implementiert ist. Im Inspector werden speed (4) und cam, der Transform der Kamera, festgelegt.

  • Nach oben bewegt sich der Spieler am Boden von der Kamera weg, nach unten auf sie zu, nach rechts und links jeweils nach rechts und links aus Sicht der Kamera: in jede Richtung speed Einheiten pro Sekunde, auch diagonal, obwohl die Kamera auf den Spieler herabblickt.
  • Während der Spieler läuft, dreht er sich in die Laufrichtung. Wenn er anhält, blickt er weiter in diese Richtung.

Drücke Play, laufe herum, während sich die Kamera dreht, und klicke dann auf Check.

Probier es selbst

using UnityEngine;

public class Mover : MonoBehaviour
{
    public float speed = 4f;
    public float gravity = -15f;
    public Transform cam;

    CharacterController controller;
    float verticalSpeed;

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

    void Update()
    {
        if (controller.isGrounded && verticalSpeed < 0f)
        {
            verticalSpeed = -2f;
        }
        verticalSpeed += gravity * Time.deltaTime;

        // Bewegt sich entlang der Weltachsen: Sorge dafür, dass es sich relativ zu cam bewegt und in die Bewegungsrichtung blickt
        Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
        move.y = verticalSpeed;
        controller.Move(move * Time.deltaTime);
    }
}
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