Menu
CoddyTech

Kinematische Körper

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

Bewegliche Plattformen, Aufzüge und Türen müssen wie feste Objekte kollidieren, dürfen aber nicht herunterfallen oder von allem, was auf ihnen landet, herumgeschubst werden. Das ist ein kinematischer Körper: Setze rb.isKinematic = true, dann bewegen ihn weder Schwerkraft noch Kräfte oder Stöße. Sein Collider zählt weiterhin, sodass ein dynamischer Körper (einer, den die Physik bewegt) gegen ihn stößt wie gegen eine Wand und auf ihm steht wie auf dem Boden. Du bewegst einen kinematischen Körper selbst mit rb.MovePosition.

Dieser Aufzug fährt mit lift m/s nach oben, bis er top erreicht. MovePosition erwartet die Position, an der sich der Körper nach diesem Schritt befinden soll. Daher addiert der Code die Bewegung für einen Schritt und verwendet dafür Time.fixedDeltaTime:

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

void FixedUpdate()
{
    if (rb.position.y < top)
    {
        rb.MovePosition(rb.position + Vector3.up * lift * Time.fixedDeltaTime);
    }
}

Warum nicht transform.position setzen? Dadurch wird das Objekt teleportiert, und die Physik bekommt nie mit, dass es sich bewegt hat: Eine Kiste auf einer gleitenden Plattform würde zurückbleiben, statt mitzufahren. MovePosition teilt der Physik mit, dass sich der Körper während des Schritts an die neue Stelle bewegt hat. Dadurch wird alles, was er berührt, richtig mitgenommen und weggeschoben. AddForce bewirkt bei einem kinematischen Körper nichts, und kinematische Körper kollidieren niemals mit statischen Collidern oder miteinander: Nur dynamische Körper stoßen mit ihnen zusammen.

challenge icon

Aufgabe

Einfach

Der Lastkahn schwebt über der Lava, und mit den Pfeiltasten sollte er sich mit speed m/s (2 im Inspector) entlang der x-Achse nach links und rechts bewegen. Im Moment hat er einen gewöhnlichen Rigidbody und fällt daher in die Lava.

  • Wenn das Spiel startet, stelle den Lastkahn auf kinematisch, damit er in der Luft schwebt und nichts, was ihn trifft, wegschieben kann.
  • Bewege ihn mit MovePosition in FixedUpdate() und verwende dabei die rohe Horizontal-Achse.

Drücke Play und bewege den Lastkahn, dann Check.

Probier es selbst

using UnityEngine;

public class Barge : MonoBehaviour
{
    public float speed = 2f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        // Mache die Barge kinematisch
    }

    void FixedUpdate()
    {
        // Verschiebe sie mit den Pfeiltasten entlang der x-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