unity3d
Physik
Suche…
Starre Körper
Überblick
Die Rigidbody-Komponente verleiht einem GameObject eine physische Präsenz in der Szene, indem es auf Kräfte reagieren kann. Sie können Kräfte direkt auf das GameObject anwenden oder auf äußere Kräfte wie die Schwerkraft oder einen anderen starren Körper reagieren lassen.
Eine Rigidbody-Komponente hinzufügen
Sie können einen Rigidbody hinzufügen, indem Sie auf Component> Physics> Rigidbody klicken
Verschieben eines Rigidbody-Objekts
Wenn Sie einen Rigidbody auf ein GameObject anwenden, sollten Sie Kräfte oder Drehmoment verwenden, um es zu bewegen, anstatt seine Transformation zu verändern. Verwenden AddForce()
Methoden AddForce()
oder AddTorque()
:
// Add a force to the order of myForce in the forward direction of the Transform.
GetComponent<Rigidbody>().AddForce(transform.forward * myForce);
// Add torque about the Y axis to the order of myTurn.
GetComponent<Rigidbody>().AddTorque(transform.up * torque * myTurn);
Masse
Sie können die Masse eines Rigidbody-GameObjects ändern, um die Reaktion auf andere Rigidbodies und Kräfte zu beeinflussen. Eine höhere Masse bedeutet, dass das GameObject mehr Einfluss auf andere physikbasierte GameObjects hat und eine größere Kraft erfordert, um sich selbst zu bewegen. Objekte mit unterschiedlicher Masse fallen in derselben Geschwindigkeit ab, wenn sie die gleichen Widerstandswerte haben. Masse im Code ändern:
GetComponent<Rigidbody>().mass = 1000;
Ziehen
Je höher der Ziehwert, desto langsamer wird ein Objekt beim Bewegen. Betrachten Sie es als eine gegnerische Kraft. Ziehen Sie den Code in den Code:
GetComponent<Rigidbody>().drag = 10;
isKinematic
Wenn Sie einen Rigidbody als Kinematisch markieren, kann er nicht von anderen Truppen beeinflusst werden, er kann jedoch andere GameObjects beeinflussen. Um den Code zu ändern:
GetComponent<Rigidbody>().isKinematic = true;
Einschränkungen
Es ist auch möglich, Einschränkungen für jede Achse hinzuzufügen, um die Position oder Drehung des Rigidbody im lokalen Raum einzufrieren. Der Standard ist RigidbodyConstraints.None
wie hier gezeigt:
Ein Beispiel für Einschränkungen im Code:
// Freeze rotation on all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeRotation
// Freeze position on all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePosition
// Freeze rotation and motion an all axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezeAll
Sie können den bitweisen OR-Operator |
mehrere Einschränkungen wie folgt kombinieren:
// Allow rotation on X and Y axes and motion on Y and Z axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePositionZ |
RigidbodyConstraints.FreezeRotationX;
Kollisionen
Wenn Sie möchten, dass ein GameObject mit einem Rigidbody auf Kollisionen reagiert, müssen Sie auch einen Collider hinzufügen. Arten von Collider sind:
- Box-Collider
- Kugel-Collider
- Capsule Collider
- Radkollidator
- Mesh Collider
Wenn Sie mehr als einen Collider auf ein GameObject anwenden, nennen wir es einen zusammengesetzten Collider.
Sie können einen Collider in einen Trigger OnTriggerEnter()
, um die OnTriggerEnter()
, OnTriggerStay()
und OnTriggerExit()
verwenden. Ein Trigger-Collider reagiert nicht physisch auf Kollisionen, andere GameObjects passieren sie einfach. Sie sind nützlich, um zu erkennen, wann sich ein anderes GameObject in einem bestimmten Bereich befindet oder nicht. Wenn Sie zum Beispiel ein Objekt sammeln, möchten wir es vielleicht einfach durchlaufen lassen, aber erkennen, wenn dies passiert.
Schwerkraft im starren Körper
Die useGravity
Eigenschaft eines RigidBody
, ob die Schwerkraft sie beeinflusst oder nicht. Wenn der RigidBody
auf false
RigidBody
ist, verhält sich der RigidBody
wie im Weltraum (ohne dass eine konstante Kraft in irgendeiner Richtung auf ihn RigidBody
wird).
GetComponent<RigidBody>().useGravity = false;
RigidBody
ist sehr nützlich in Situationen, in denen Sie alle anderen Eigenschaften von RigidBody
außer der durch die Schwerkraft kontrollierten Bewegung benötigen.
Wenn diese Funktion aktiviert, die RigidBody
wird von einer Gravitationskraft, die im Rahmen betroffen sein Physics Settings
- Physics Settings
:
Die Schwerkraft wird in Welteinheiten pro Sekunde im Quadrat definiert und hier als dreidimensionaler Vektor eingegeben: Das bedeutet, dass bei allen Einstellungen im Beispielbild alle RigidBodies
mit der Eigenschaft useGravity
auf True
eine Kraft von 9,81 useGravity
pro Sekunde erfahren pro Sekunde in Abwärtsrichtung (als negative Y-Werte im Unity-Koordinatensystem zeigen nach unten).