Developedia
Developedia
Unity Puska 6 - Fizika (…)

Unity Puska 6 - Fizika (…)

Mozágs Unity fizikával

Colliderek Átfedésének detektálása

Raycast

TODO

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
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;
	}
}