Menu
CoddyTech

Mit AddForce schieben

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 2 von 63.

Sobald ein Objekt ein Rigidbody hat, bewegt die Physik es. Daher hörst du auf, seine Position zu verä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: Sie beschleunigt den Körper so lange, wie du sie weiterhin hinzufügst, und zwar 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 Pfeiltaste nach oben 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, sodass eine kleine Kraft eine schwere Kiste möglicherweise überhaupt nicht bewegt.

challenge icon

Aufgabe

Einfach

Der Puck auf der Eisbahn hat ein Rigidbody, und das Eis hat keine Reibung. Schiebe ihn mit den Pfeiltasten: Die Horizontal-Achse schiebt ihn entlang der x-Achse und die Vertical-Achse entlang der z-Achse, mit einer Kraft von push (4 im Inspector).

Schiebe ihn nur mit Kräften, damit er weitergleitet, wenn du loslässt. Drücke Play, steuere den Puck über die Eisbahn und klicke dann auf Check.

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
    }
}
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 Physik und Gameplay