Zoeken…


Rigidbodies

Overzicht

De component Rigidbody geeft een GameObject een fysieke aanwezigheid in de scène doordat het in staat is op krachten te reageren. Je zou krachten rechtstreeks op het GameObject kunnen uitoefenen of het kunnen laten reageren op externe krachten zoals zwaartekracht of een andere Rigidbody die het raakt.


Een Rigidbody-component toevoegen

U kunt een Rigidbody toevoegen door op Component> Fysica> Rigidbody te klikken


Een Rigidbody-object verplaatsen

Het wordt aanbevolen dat als je een Rigidbody op een GameObject toepast, je krachten of koppel gebruikt om het te verplaatsen in plaats van het te transformeren. Gebruik AddForce() methoden AddForce() of 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);

Massa

Je kunt de massa van een Rigidbody GameObject wijzigen om te beïnvloeden hoe het reageert met andere Rigidbodies en krachten. Een hogere massa betekent dat het GameObject meer invloed zal hebben op andere op fysica gebaseerde GameObjects, en een grotere kracht vereist om zichzelf te bewegen. Objecten met verschillende massa vallen in dezelfde snelheid als ze dezelfde sleepwaarden hebben. Om massa in code te wijzigen:

GetComponent<Rigidbody>().mass = 1000;

Slepen

Hoe hoger de sleepwaarde, hoe meer een object vertraagt tijdens het verplaatsen. Zie het als een tegenkracht. Om de sleep in code te wijzigen:

GetComponent<Rigidbody>().drag = 10;

isKinematic

Als je een Rigidbody als Kinematic markeert, kan het niet worden beïnvloed door andere krachten, maar kan het wel andere GameObjects beïnvloeden. Code wijzigen:

GetComponent<Rigidbody>().isKinematic = true;

constraints

Het is ook mogelijk om beperkingen aan elke as toe te voegen om de positie of rotatie van de Rigidbody in de lokale ruimte te bevriezen. De standaardwaarde is RigidbodyConstraints.None zoals hier getoond:

voer hier de afbeeldingsbeschrijving in

Een voorbeeld van beperkingen in 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 

U kunt de bitsgewijze OF-operator | om meerdere beperkingen als volgt te combineren:

// Allow rotation on X and Y axes and motion on Y and Z axes.
GetComponent<Rigidbody>().constraints = RigidbodyConstraints.FreezePositionZ | 
    RigidbodyConstraints.FreezeRotationX;

botsingen

Als je een GameObject met een Rigidbody erop wilt laten reageren op botsingen, moet je er ook een botser aan toevoegen. Soorten botsers zijn:

  • Box collider
  • Bol botser
  • Capsule-botser
  • Wielbotser
  • Mesh collider

Als u meer dan één botser op een GameObject toepast, noemen we dit een samengestelde botser.

U kunt van een collider een trigger maken om de OnTriggerEnter() , OnTriggerStay() en OnTriggerExit() gebruiken. Een trigger-botser reageert niet fysiek op botsingen, andere GameObjects gaan er gewoon doorheen. Ze zijn handig om te detecteren wanneer een ander GameObject zich in een bepaald gebied bevindt of niet. Als we bijvoorbeeld een item verzamelen, willen we het misschien gewoon doornemen, maar detecteren wanneer dit gebeurt.

Zwaartekracht in star lichaam

De eigenschap useGravity van een RigidBody bepaalt of zwaartekracht dit beïnvloedt of niet. Indien ingesteld op false de RigidBody zich gedragen als in de ruimte (zonder dat er in enige richting een constante kracht op wordt uitgeoefend).

GetComponent<RigidBody>().useGravity = false;

Het is erg handig in situaties waarin u alle andere eigenschappen van RigidBody behalve de beweging die wordt geregeld door de zwaartekracht.

Indien ingeschakeld, wordt de RigidBody beïnvloed door een zwaartekracht, ingesteld onder Physics Settings :

voer hier de afbeeldingsbeschrijving in

Zwaartekracht wordt gedefinieerd in wereldeenheden per seconde in het kwadraat en wordt hier ingevoerd als een driedimensionale vector: wat betekent dat met de instellingen in de voorbeeldafbeelding, alle RigidBodies met de eigenschap useGravity ingesteld op True een kracht van 9,81 useGravity per seconde zullen ervaren per seconde in neerwaartse richting (als negatieve Y-waarden in het coördinatensysteem van Unity naar beneden wijzen).



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow