Menu
CoddyTech

Mit einem Impuls springen

Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 3 von 71.

AddForce nimmt ein zweites Argument entgegen, einen ForceMode, der angibt, wie der Vektor verwendet wird. Ohne dieses Argument erhältst du ForceMode.Force: einen Schub, der einen Physikschritt lang anhält und daher Schritt für Schritt hinzugefügt werden muss. Ein Tritt, ein Sprung oder eine Explosion geschieht auf einmal. Dafür gibt es ForceMode.Impulse: den gesamten Schub auf einmal, der die Geschwindigkeit um den Impuls geteilt durch die Masse ändert.

Dieser Fußball (0.5 kg) wird durch einen Klick getreten. Seine Geschwindigkeit erhöht sich beim nächsten Physikschritt um (0, 2, 6) / 0.5 = (0, 4, 12) m/s, danach übernehmen die Schwerkraft und das Gras:

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        rb.AddForce(new Vector3(0, 2, 6), ForceMode.Impulse);
    }
}

Ein einmaliger Schub kann im Frame des Klicks aus Update() aufgerufen werden: Unity speichert ihn und wendet ihn beim nächsten Physikschritt an. Die vier Modi unterscheiden sich in zwei Punkten: auf einmal oder über einen Schritt hinweg und mit oder ohne Berücksichtigung der Masse:

  • Force: über einen Schritt hinweg, durch die Masse geteilt (Motoren, Wind).
  • Acceleration: über einen Schritt hinweg, Masse wird ignoriert.
  • Impulse: auf einmal, durch die Masse geteilt (Tritte, Sprünge).
  • VelocityChange: auf einmal, Masse wird ignoriert: Der Vektor wird direkt zur Geschwindigkeit addiert.
challenge icon

Aufgabe

Einfach

Lass den Frosch bei jedem Drücken der Leertaste einmal springen.

  1. Schreibe unter den Kommentar if (Input.GetKeyDown(KeyCode.Space)).
  2. Rufe darin rb.AddForce(Vector3.up * jumpImpulse, ForceMode.Impulse); auf, damit der Frosch 2 kg wiegt.

Klicke auf „Spielen“ und drücke die Leertaste: Der Frosch springt hoch und fällt wieder herunter. Klicke dann auf „Prüfen“.

Probier es selbst

using UnityEngine;

public class FrogJump : MonoBehaviour
{
    public float jumpImpulse = 10f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        // Space: ein einmaliger Impuls nach oben mit jumpImpulse
    }
}

Alle Lektionen in Physik und Gameplay

Übe selbstständig: Unity-Playground