En aquest tema, explorarem com implementar i gestionar la física dins del motor de videojocs Unity. Unity és un dels motors més populars per al desenvolupament de videojocs i ofereix una àmplia gamma d'eines per simular física de manera realista. Aprendrem a utilitzar aquestes eines per crear moviments, col·lisions i altres interaccions físiques dins dels nostres jocs.
Continguts
- Introducció a la Física en Unity
- Components de Física en Unity
- Configuració de Rigidbodies
- Detecció i Resolució de Col·lisions
- Forces i Moviments
- Joints i Constraints
- Exercicis Pràctics
- Introducció a la Física en Unity
Unity utilitza el motor de física PhysX de NVIDIA per simular la física en temps real. Aquest motor permet simular moviments, col·lisions, forces i altres fenòmens físics de manera precisa i eficient.
Conceptes Clau
- Motor de Física PhysX: Motor de física integrat en Unity que proporciona simulacions realistes.
- Component Rigidbody: Component que permet que un objecte sigui afectat per la física.
- Collider: Component que defineix la forma de l'objecte per a la detecció de col·lisions.
- Components de Física en Unity
Rigidbody
El component Rigidbody
és essencial per a qualsevol objecte que vulgui ser afectat per la física. Permet que l'objecte respongui a forces, gravetat i col·lisions.
// Exemple de com afegir un Rigidbody a un objecte en Unity public class AddRigidbody : MonoBehaviour { void Start() { gameObject.AddComponent<Rigidbody>(); } }
Collider
Els Colliders
defineixen la forma de l'objecte per a la detecció de col·lisions. Hi ha diferents tipus de colliders, com ara BoxCollider, SphereCollider, i MeshCollider.
// Exemple de com afegir un BoxCollider a un objecte en Unity public class AddBoxCollider : MonoBehaviour { void Start() { gameObject.AddComponent<BoxCollider>(); } }
- Configuració de Rigidbodies
Propietats del Rigidbody
- Mass: Defineix la massa de l'objecte.
- Drag: Defineix la resistència al moviment.
- Angular Drag: Defineix la resistència a la rotació.
- Use Gravity: Si està activat, l'objecte serà afectat per la gravetat.
- Is Kinematic: Si està activat, l'objecte no serà afectat per la física, però podrà ser mogut manualment.
// Exemple de configuració de propietats del Rigidbody public class ConfigureRigidbody : MonoBehaviour { void Start() { Rigidbody rb = gameObject.AddComponent<Rigidbody>(); rb.mass = 2.0f; rb.drag = 0.5f; rb.angularDrag = 0.05f; rb.useGravity = true; rb.isKinematic = false; } }
- Detecció i Resolució de Col·lisions
OnCollisionEnter
Unity proporciona el mètode OnCollisionEnter
per detectar col·lisions entre objectes amb colliders.
// Exemple de detecció de col·lisions void OnCollisionEnter(Collision collision) { Debug.Log("Col·lisió detectada amb " + collision.gameObject.name); }
OnTriggerEnter
Per a col·lisions que no necessiten resposta física, podem utilitzar OnTriggerEnter
amb colliders configurats com a triggers.
// Exemple de detecció de triggers void OnTriggerEnter(Collider other) { Debug.Log("Trigger activat per " + other.gameObject.name); }
- Forces i Moviments
Aplicar Forces
Podem aplicar forces als Rigidbodies
per moure'ls de manera realista.
// Exemple d'aplicació de forces public class ApplyForce : MonoBehaviour { public float forceAmount = 10.0f; void Start() { Rigidbody rb = gameObject.GetComponent<Rigidbody>(); rb.AddForce(Vector3.up * forceAmount, ForceMode.Impulse); } }
Tipus de Forces
- ForceMode.Force: Aplica una força contínua.
- ForceMode.Impulse: Aplica una força instantània.
- ForceMode.Acceleration: Aplica una acceleració contínua.
- ForceMode.VelocityChange: Canvia la velocitat instantàniament.
- Joints i Constraints
Joints
Els Joints
permeten connectar dos objectes i definir com es mouen l'un respecte a l'altre. Alguns tipus de joints inclouen HingeJoint, SpringJoint i FixedJoint.
// Exemple d'ús d'un HingeJoint public class AddHingeJoint : MonoBehaviour { void Start() { HingeJoint hinge = gameObject.AddComponent<HingeJoint>(); hinge.connectedBody = anotherGameObject.GetComponent<Rigidbody>(); } }
Constraints
Podem utilitzar constraints per restringir el moviment i la rotació dels Rigidbodies
.
// Exemple de configuració de constraints public class ConfigureConstraints : MonoBehaviour { void Start() { Rigidbody rb = gameObject.GetComponent<Rigidbody>(); rb.constraints = RigidbodyConstraints.FreezePositionY | RigidbodyConstraints.FreezeRotationX; } }
- Exercicis Pràctics
Exercici 1: Crear un Objecte que Cau
- Crea un nou projecte en Unity.
- Afegeix un
Cube
a l'escena. - Afegeix un component
Rigidbody
alCube
. - Executa l'escena i observa com el
Cube
cau degut a la gravetat.
Exercici 2: Aplicar una Força a un Objecte
- Utilitza el mateix projecte de l'exercici anterior.
- Afegeix el següent script al
Cube
per aplicar una força cap amunt quan comenci l'escena.
public class ApplyUpwardForce : MonoBehaviour { void Start() { Rigidbody rb = GetComponent<Rigidbody>(); rb.AddForce(Vector3.up * 10.0f, ForceMode.Impulse); } }
Solucions
Solució Exercici 1
- Crea un nou projecte en Unity.
- Afegeix un
Cube
a l'escena des del menúGameObject > 3D Object > Cube
. - Selecciona el
Cube
i fes clic aAdd Component
al panellInspector
. CercaRigidbody
i afegeix-lo. - Executa l'escena fent clic a
Play
i observa com elCube
cau.
Solució Exercici 2
- Utilitza el mateix projecte de l'exercici anterior.
- Crea un nou script anomenat
ApplyUpwardForce
i enganxa el codi proporcionat. - Afegeix l'script al
Cube
arrossegant-lo al panellInspector
. - Executa l'escena i observa com el
Cube
rep una força cap amunt.
Conclusió
En aquesta secció, hem après a utilitzar els components de física en Unity per crear simulacions realistes. Hem vist com configurar Rigidbodies
, detectar col·lisions, aplicar forces i utilitzar Joints
i Constraints
. Aquests conceptes són fonamentals per a qualsevol desenvolupador de videojocs que vulgui crear experiències immersives i realistes. En la següent secció, explorarem com implementar física en Unreal Engine.
Física de Videojocs
Mòdul 1: Introducció a la Física en Videojocs
Mòdul 2: Cinemàtica i Dinàmica
- Moviment Rectilini Uniforme (MRU)
- Moviment Rectilini Uniformement Accelerat (MRUA)
- Lleis de Newton
- Moviment Circular
Mòdul 3: Col·lisions i Respostes
Mòdul 4: Física de Rigid Bodies
- Introducció a Rigid Bodies
- Simulació de Rigid Bodies
- Interaccions entre Rigid Bodies
- Constraints i Joints