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:

Geben Sie hier die Bildbeschreibung ein

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 :

Geben Sie hier die Bildbeschreibung ein

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).



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow