Ricerca…


Rigidbodies

Panoramica

Il componente Rigidbody conferisce a GameObject una presenza fisica nella scena in quanto è in grado di rispondere alle forze. Potresti applicare le forze direttamente al GameObject o permetterle di reagire a forze esterne come la gravità o un altro Rigidbody che la colpisce.


Aggiunta di un componente Rigidbody

È possibile aggiungere un corpo rigido facendo clic su Componente> Fisica> Corpo rigido


Spostare un oggetto Rigidbody

Si raccomanda che se applichi un Rigidbody a un GameObject, usi le forze o la coppia per spostarlo invece di manipolarlo. Utilizzare i AddForce() o AddTorque() per questo:

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

È possibile modificare la massa di un GameObject Rigidbody per influenzare il modo in cui reagisce con altri Rigidi e forze. Una massa più alta significa che GameObject avrà più influenza su altri oggetti GameObjects basati sulla fisica e richiederà una forza maggiore per spostarsi. Oggetti con massa diversa cadranno alla stessa velocità se hanno gli stessi valori di resistenza. Per modificare la massa nel codice:

GetComponent<Rigidbody>().mass = 1000;

Trascinare

Maggiore è il valore di trascinamento, più un oggetto rallenta durante lo spostamento. Pensala come una forza opposta. Per modificare il trascinamento nel codice:

GetComponent<Rigidbody>().drag = 10;

isKinematic

Se contrassegni un Rigidbody come Kinematic, questo non può essere influenzato da altre forze ma può comunque influenzare altri GameObjects. Per modificare il codice:

GetComponent<Rigidbody>().isKinematic = true;

vincoli

È anche possibile aggiungere vincoli a ciascun asse per congelare la posizione o la rotazione del corpo rigido nel locale. L'impostazione predefinita è RigidbodyConstraints.None come mostrato qui:

inserisci la descrizione dell'immagine qui

Un esempio di vincoli nel codice:

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

È possibile utilizzare l'operatore OR bit a bit | combinare più vincoli in questo modo:

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

collisioni

Se vuoi un GameObject con un Rigidbody su di esso per rispondere alle collisioni dovrai anche aggiungere un collisore ad esso. I tipi di collisore sono:

  • Box collider
  • Spider Collider
  • Capsule collider
  • Volante
  • Mesh collider

Se si applica più di un collisore a un GameObject, viene chiamato collisore composto.

È possibile creare un collider in Trigger per utilizzare i OnTriggerEnter() , OnTriggerStay() e OnTriggerExit() . Un collisore del grilletto non reagisce fisicamente alle collisioni, altri GameObject semplicemente lo attraversano. Sono utili per rilevare quando un altro GameObject si trova in una determinata area o no, ad esempio, quando si raccoglie un oggetto, potremmo essere in grado di scorrerlo ma rilevare quando ciò accade.

Gravità nel corpo rigido

La proprietà useGravity di un RigidBody controlla se la gravità lo influenza o meno. Se impostato su false il RigidBody si comporterà come se nello spazio esterno (senza una forza costante applicata ad esso in qualche direzione).

GetComponent<RigidBody>().useGravity = false;

È molto utile nelle situazioni in cui hai bisogno di tutte le altre proprietà di RigidBody eccetto il movimento controllato dalla gravità.

Quando abilitato, il RigidBody sarà influenzato da una forza gravitazionale, impostata in Physics Settings :

inserisci la descrizione dell'immagine qui

La gravità è definita in unità del mondo al secondo al quadrato, ed è qui inserita come un vettore tridimensionale: significa che con le impostazioni nell'immagine di esempio, tutti i RigidBodies con la proprietà useGravity impostata su True sperimenteranno una forza di 9,81 unità mondiali al secondo al secondo nella direzione verso il basso (poiché i valori Y negativi nel sistema di coordinate di Unity sono rivolti verso il basso).



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow