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.
Aufgabe
EinfachDer 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
MovePositioninFixedUpdate()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
}
}
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
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand