Sök…


Rigidbodies

Översikt

Rigidbody-komponenten ger en GameObject en fysisk närvaro i scenen genom att den kan svara på krafter. Du kan tillämpa krafter direkt på GameObject eller låta den reagera på externa krafter som tyngdkraften eller en annan rigidkropp som slår den.


Lägga till en Rigidbody-komponent

Du kan lägga till en rigidbody genom att klicka på Komponent> Fysik> rigidkropp


Flytta ett Rigidbody-objekt

Det rekommenderas att om du använder en styvkropp på ett GameObject att du använder krafter eller vridmoment för att flytta det snarare än att manipulera det är Transform. Använd AddForce() eller AddTorque() metoder för detta:

// 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

Du kan ändra massan på ett Rigidbody GameObject för att påverka hur det reagerar med andra rigidbodies och krafter. En högre massa innebär att GameObject kommer att ha mer påverkan på andra fysikbaserade GameObjects och kommer att kräva en större kraft för att röra sig själv. Objekt med olika massa kommer att falla i samma takt om de har samma dragvärden. För att ändra massa i kod:

GetComponent<Rigidbody>().mass = 1000;

Drag

Ju högre dragvärde, desto mer kommer ett objekt att sakta ner medan du flyttar. Tänk på det som en motsatt kraft. Så här ändrar du dra kod:

GetComponent<Rigidbody>().drag = 10;

isKinematic

Om du markerar en rigidbody som kinematisk kan den inte påverkas av andra krafter men kan fortfarande påverka andra GameObjects. Så här ändrar du i kod:

GetComponent<Rigidbody>().isKinematic = true;

begränsningar

Det är också möjligt att lägga till begränsningar till varje axel för att frysa Rigidbody-position eller rotation i det lokala rymden. Standard är RigidbodyConstraints.None som visas här:

ange bildbeskrivning här

Ett exempel på begränsningar i kod:

// 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 

Du kan använda den bitvisa ELLER-operatören | för att kombinera flera begränsningar så:

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

kollisioner

Om du vill ha ett GameObject med en rigidbody på den för att svara på kollisioner måste du också lägga till en collider till den. Typer av collider är:

  • Box collider
  • Sphere collider
  • Capsule collider
  • Wheel collider
  • Mesh collider

Om du tillämpar mer än en collider på ett GameObject, kallar vi det en sammansatt collider.

Du kan skapa en collider till en Trigger för att använda OnTriggerEnter() , OnTriggerStay() och OnTriggerExit() . En triggercollider reagerar inte fysiskt på kollisioner, andra GameObjects passerar helt enkelt genom den. De är användbara för att upptäcka när ett annat GameObject befinner sig i ett visst område eller inte, till exempel när vi samlar in ett objekt kan vi kanske bara köra igenom det men upptäcka när detta händer.

Gravitet i styv kropp

useGravity hos en RigidBody styr huruvida gravitationen påverkar den eller inte. Om RigidBody inställd på false kommer det att uppträda som i det yttre rymden (utan att en konstant kraft appliceras på den i någon riktning).

GetComponent<RigidBody>().useGravity = false;

Det är mycket användbart i de situationer där du behöver alla andra egenskaper hos RigidBody utom rörelsen som styrs av tyngdkraften.

När det är aktiverat kommer RigidBody att påverkas av en gravitationskraft, inställd under Physics Settings :

ange bildbeskrivning här

Gravity definieras i världsenheter per sekund i kvadrat, och matas in här som en tredimensionell vektor: vilket innebär att med inställningarna i exempelbilden kommer alla RigidBodies med egenskapen useGravity inställd på True att uppleva en kraft på 9,81 världsenheter per sekund per sekund i nedåtgående riktning (som negativa Y-värden i Unitys koordinatsystem pekar nedåt).



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow