Mit AddForce schieben
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 2 von 71.
Sobald ein Objekt ein Rigidbody hat, bewegt die Physik es. Deshalb hörst du auf, seine Position zu ändern, und schiebst es stattdessen an. rb.AddForce(force) schiebt den Körper mit einer Kraft an, einem Vector3 in Newton. Eine Kraft legt keine Geschwindigkeit fest: Solange du sie weiter hinzufügst, beschleunigt sie den Körper jede Sekunde um die Kraft geteilt durch die Masse. Hörst du auf zu schieben, behält der Körper seine Geschwindigkeit bei.
Dieses Hovercraft (2 kg) hat ein Triebwerk: Solange die Nach-oben-Taste gedrückt ist, schiebt eine Kraft von thrust es nach vorne, entlang +z. Bei einem Schub von 12 gewinnt es jede Sekunde 12 / 2 = 6 m/s hinzu:
public float thrust = 12f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
if (Input.GetKey(KeyCode.UpArrow))
{
rb.AddForce(Vector3.forward * thrust);
}
}Kräfte gehören in FixedUpdate(), das Unity vor jedem Physikschritt 50-mal pro Sekunde aufruft (Lektion 4 erklärt warum). In der Zeile kommt kein Time.deltaTime vor: AddForce verteilt die Kraft bereits über den Schritt, und eine Multiplikation mit Time.deltaTime würde den Schub 50-mal schwächer machen. Auf dem Boden wirkt die Reibung entgegen, deshalb kann eine kleine Kraft eine schwere Kiste möglicherweise überhaupt nicht bewegen.
Aufgabe
EinfachSchiebe den Puck mit Kräften über die reibungsfreie Eisfläche.
- Lies in
FixedUpdate()float h = Input.GetAxis("Horizontal");undfloat v = Input.GetAxis("Vertical");aus. - Rufe
rb.AddForce(new Vector3(h, 0, v) * push);ohneTime.deltaTimeauf.
Drücke „Spielen“, schiebe den Puck an und lass los: Er gleitet weiter. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
public class PuckPusher : MonoBehaviour
{
public float push = 4f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// Schiebe den Puck: Horizontal entlang der x-Achse, Vertikal entlang der z-Achse
}
}
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