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.
Aufgabe
MittelDie 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
speedEinheiten 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);
}
}
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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der Bank8Charaktersteuerung
CharacterController.MoveSchwerkraft von HandSpringenDinge schiebenDorthin bewegen, wohin du schaustRückblick: Doppelsprung