Mozágs Unity fizikával
using UnityEngine;
public class PhysicsBasics : MonoBehaviour
{
[SerializeField] Transform t; // Manuálisan mozgatjuk
[SerializeField] Vector3 velocity;
[SerializeField] Vector3 angularVelocity;
[SerializeField] Rigidbody2D rb2; // Fizikai mozgatás
[SerializeField] Rigidbody rb3;
[SerializeField] Vector3 v3; // Példa Vector3
[SerializeField] Vector2 v2; // Példa Vector2
void Update()
{
transform.position += velocity * Time.deltaTime; // Manuálisan mozgatjuk
// Ezt RigidBody-val nem kell megtenni, mert azt automatikusan mozgatja a Fizika
}
void FixedUpdate()
{
// Pozíció változtatás
t.position = v3;
rb2.position = v2; // Nem javasolt FixedUpdate-on kívül
rb3.position = v3; // Nem javasolt FixedUpdate-on kívül
rb2.MovePosition(v2); // Bárhol javasolt
rb3.MovePosition(v3); // Bárhol javasolt
// Sebességvektor beállítása
velocity = v3;
rb2.velocity = v2;
rb3.velocity = v3;
// Sebesség nullázása
velocity = Vector3.zero;
rb2.velocity = Vector2.zero;
rb3.velocity = Vector3.zero;
// Sebesség módosítása (Pillanatszerű, A tömeg NEM számít)
velocity += v3;
rb2.velocity += v2;
rb3.AddForce(v3, ForceMode.VelocityChange);
// Gyorsítás egy vektorral (Folyamatos, A tömeg NEM számít)
velocity += v3 * Time.deltaTime;
rb2.velocity += v2 * Time.deltaTime;
rb3.AddForce(v3, ForceMode.Acceleration);
// Lendület módosítása (Pillanatszerű, A tömeg számít)
velocity += v3 / rb3.mass;
rb2.AddForce(v2, ForceMode2D.Impulse);
rb3.AddForce(v3, ForceMode.Impulse);
// Erő közlése (Folyamatos, A tömeg számít)
velocity += v3 * (Time.deltaTime / rb3.mass);
rb2.AddForce(v2, ForceMode2D.Force);
rb3.AddForce(v3, ForceMode.Force);
// Gyorsítás fix pozícióban
Vector3 globalPos = new Vector3(1,2,3);
rb2.AddForceAtPosition(v2, globalPos, ForceMode2D.Force); // Más ForceMode2D-kel is
rb3.AddForceAtPosition(v3, globalPos, ForceMode.Force); // Más ForceMode-okkal is
// Közegellenállás szimulálása
float drag = 0.1f;
velocity *= 1f - (drag * Time.fixedDeltaTime);
rb2.drag = drag;
rb3.drag = drag;
// ------------------ Forgás -----------------
// Elfordulás beállítása
t.rotation = Quaternion.Euler(v3);
rb2.rotation = v2.x;
rb3.rotation = Quaternion.Euler(v3);
// Szögsebesség beállítása
angularVelocity = v3;
rb2.angularVelocity = v2.x;
rb3.angularVelocity = v3;
// Szögsebesség nullázása
angularVelocity = Vector3.zero;
rb2.angularVelocity = 0f;
rb3.angularVelocity = Vector3.zero;
// Szögsebesség módosítása (Pillanatszerű, A tömeg NEM számít)
angularVelocity += v3;
rb2.angularVelocity += v2.x;
rb3.AddTorque(v3, ForceMode.VelocityChange);
// Szöggyorsulás egy vektorral (Folyamatos, A tömeg NEM számít)
angularVelocity += v3 * Time.deltaTime;
rb2.angularVelocity += v2.x * Time.deltaTime;
rb3.AddTorque(v3, ForceMode.Acceleration);
// Perdület módosítása (Pillanatszerű, A tömeg számít)
angularVelocity += v3 / rb3.mass;
rb2.AddTorque(v2.x, ForceMode2D.Impulse);
rb3.AddTorque(v3, ForceMode.Impulse);
// Forgatónyomaték közlése (Folyamatos, A tömeg számít)
angularVelocity += v3 * (Time.deltaTime / rb3.mass);
rb2.AddTorque(v2.x, ForceMode2D.Force);
rb3.AddTorque(v3, ForceMode.Force);
// Közegellenállás szimulálása forgáson.
float angularDrag = 0.1f;
angularVelocity *= 1f - (angularDrag * Time.fixedDeltaTime);
rb2.angularDrag = angularDrag;
rb3.angularDrag = angularDrag;
}
}
Colliderek Átfedésének detektálása
Raycast
TODO