Geschwindigkeit
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 5 von 71.
rb.linearVelocity beschreibt, wie sich der Körper gerade bewegt: ein Vector3 in Metern pro Sekunde entlang der x-, y- und z-Achse. Wenn du den Wert ausliest, erfährst du, wohin sich der Körper bewegt, und rb.linearVelocity.magnitude ist seine Geschwindigkeit. Wenn du den Wert setzt, ändert sich die Bewegung sofort, ohne Anlauf und unabhängig von der Masse: Eine 1-kg-Kiste und ein 50-kg-Tresor, die beide auf 2 m/s gesetzt werden, bewegen sich ab dem nächsten Physikschritt exakt mit 2 m/s. Die Schwerkraft, Reibung und Stöße wirken danach weiterhin auf sie ein.
Dieses Go-Kart fährt mit exakt cruise m/s vorwärts. Es kopiert die Geschwindigkeit, ändert nur z und weist sie wieder zu. Dadurch bleibt der von der Schwerkraft verursachte y-Wert erhalten, und das Kart fällt weiterhin vom Ende einer Rampe:
void FixedUpdate()
{
Vector3 vel = rb.linearVelocity;
vel.z = cruise; // vorwärts mit genau cruise m/s
rb.linearVelocity = vel; // y behält den durch die Schwerkraft entstandenen Wert bei
}Wenn du auch y auf 0 setzen würdest, würde bei jedem Schritt die durch die Schwerkraft verursachte Geschwindigkeit verworfen, und das Kart würde von der Rampe hinuntergleiten, statt herunterzufallen. Vor Unity 6 hieß diese Eigenschaft velocity. In älteren Tutorials steht weiterhin rb.velocity: In Unity 6 wird es kompiliert, aber mit einer Warnung, dass velocity veraltet ist und in linearVelocity umbenannt wurde. drag wurde auf dieselbe Weise zu linearDamping. Verwende die neuen Namen.
Aufgabe
EinfachLass den Roboter mit genau speed m/s laufen und von der Kante fallen.
- Lies in
FixedUpdate()float h = Input.GetAxisRaw("Horizontal");undfloat vaus"Vertical"aus. - Setze
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, v * speed);und behalte dabei den y-Wert der Schwerkraft bei.
Drücke „Spielen“ und geh von der Kante: Der Roboter hält an, sobald du loslässt, und fällt herunter. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
public class RobotWalk : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// Bewege dich mit den Pfeiltasten mit genau speed und behalte den y-Wert der Schwerkraft bei
}
}
Alle Lektionen in Physik und Gameplay
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe4Coroutinen
AufrufenWiederholt aufrufen, Aufruf abbrechenDeine erste CoroutineSchleifen in CoroutinenCoroutinen beendenRückblick: Countdown10Projekt: Arena-Flucht
Die ArenaJäger2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand5Projekt: Münzrausch
Der rollende BallMünzen zum Einsammeln11Abschließende Herausforderungen
KanonenreichweiteBewegliche ZieleMurmelgolfIns LochEscape RoomDie TürÜbe selbstständig: Unity-Playground