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
Cubea l'escena. - Afegeix un component
RigidbodyalCube. - Executa l'escena i observa com el
Cubecau 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
Cubeper 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
Cubea l'escena des del menúGameObject > 3D Object > Cube. - Selecciona el
Cubei fes clic aAdd Componental panellInspector. CercaRigidbodyi afegeix-lo. - Executa l'escena fent clic a
Playi observa com elCubecau.
Solució Exercici 2
- Utilitza el mateix projecte de l'exercici anterior.
- Crea un nou script anomenat
ApplyUpwardForcei enganxa el codi proporcionat. - Afegeix l'script al
Cubearrossegant-lo al panellInspector. - Executa l'escena i observa com el
Cuberep 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
