Developedia
Developedia
Rigidbody forgatása

Rigidbody forgatása

A forgómozgás fizikája megfeleltethető a lineárissal. Ezt a A mechanika alapjaiA mechanika alapjai leckében tárgyaltuk. Ez a párhuzam a Unity fizikában is megfigyelhető.

A legnagyobb különbség, hogy a Rigidbody és Rigidbody2D nem vektorban tárolja a forgási szögsebességét, hanem 3D-ben egy Quaternion-ban és 2D-ben egy float számban, hisz ezutóbbi esetben csak egy forgástengely van, a Z.

Mind 2 és 3 dimenzióban a forgási sebesség fokban értendő.

Módosíthatjuk a Rigidbody rotation tulajdonságát manuálisan is hasonlóan a velocity-hez. 3D esetén a legcélszerűbb a Quaternion-t Euler szögekbe alakítani. Általában így könnyebb vele dolgozni.

Emellett használható az AddTorque függvény is az AddForce-hoz hasonlóan.

3D esetén az AddTorque Euler szögeket vár Vector3-ban vagy 3 darab float-ban. 2D-ben csak egy darab float szöget.

Minden esetben az AddForce-hoz hasonlóan adhatunk egy ForceMode típusú opcionális paramétert, ami hasonlóan működik, mint a lineáris esetben. Sajnos ehhez fejből kell tudni a forgómozgás fizikai mennyiségeinek lineáris fizikában használt megfelelőit:

Függ a tömegtől
Független a tömegtől
Pillanat szerű
Szögsebesség változás ForceMode.VelocityCahnge
Perdület változás ForceMode.Impulse
Folyamatos
Szöggyorsulás ForceMode.Acceleration
Forgatónyomaték ForceMode.Force
Vector3 value = new Vector3(0,90,270); // Fokban
Rigidbody rigidbody = GetComponent<Rigidbody>();

rigidbody.AddTorque(value, ForceMode.VelocityCahnge);  // Szögsebesség változás
rigidbody.AddTorque(value, ForceMode.Acceleration);    // Szöggyorsulás
rigidbody.AddTorque(value, ForceMode.Impulse);         // Perdület változás
rigidbody.AddTorque(value, ForceMode.Force);           // Forgatónyomaték
Logo

Főoldal

Blog

Elmélet

3D Studio

Adatvédelmi nyilatkozat

GY.I.K.

Házirend

Szerző: Marosi Csaba / marosi.csaba@3d-studio.hu

DiscordGitHubLinkedIn
// --------------------------------------- 3D ---------------------------------------
Vector3 value = new Vector3(0, 90, 270);                // Fokban
Rigidbody rigidbody = GetComponent<Rigidbody>();
Vector3 euler = rigidbody.rotation.eulerAngles

// ... Műveletek ...
euler += value;                                         // Szögsebesség változás
euler += value * Time.fixedDeltaTime;                   // Szöggyorsulás
euler += value / rigidbody.mass;                        // Perdület változás
euler += value / rigidbody.mass * Time.fixedDeltaTime;  // Forgatónyomaték

rigidbody.rotation = Quaternion.Euler(euler);
// --------------------------------------- 2D ---------------------------------------
float value = 90; // Fokban
Rigidbody2D rb = GetComponent<Rigidbody2D>();

// ... Műveletek ...
rb.rotation += value;                                         // Szögsebesség változás
rb.rotation += value * Time.fixedDeltaTime;                   // Szöggyorsulás
rb.rotation += value / rigidbody.mass;                        // Perdület változás
rb.rotation += value / rigidbody.mass * Time.fixedDeltaTime;  // Forgatónyomaték