Introducció
La detecció de col·lisions és una part fonamental en el desenvolupament de jocs, ja que permet que els objectes interactuïn entre ells de manera realista. En aquest tema, aprendrem com Unity gestiona les col·lisions i com podem utilitzar aquesta funcionalitat per crear comportaments interessants en els nostres jocs.
Conceptes Clau
- Col·liders: Components que defineixen la forma d'un objecte per a la detecció de col·lisions.
- Rigidbody: Component que permet que un objecte sigui afectat per la física.
- Mètodes de Col·lisió: Funcions que es criden automàticament quan es produeixen col·lisions.
Tipus de Col·liders
Unity ofereix diversos tipus de col·liders que podem utilitzar segons les necessitats del nostre joc:
- Box Collider: Un col·lider en forma de caixa.
- Sphere Collider: Un col·lider en forma d'esfera.
- Capsule Collider: Un col·lider en forma de càpsula.
- Mesh Collider: Un col·lider que segueix la forma d'un mesh.
Exemple Pràctic
Configurant Col·liders i Rigidbody
-
Afegir un Box Collider a un objecte:
// Selecciona l'objecte al qual vols afegir el col·lider GameObject myObject = GameObject.CreatePrimitive(PrimitiveType.Cube); // El Box Collider s'afegeix automàticament quan es crea un cub
-
Afegir un Rigidbody a un objecte:
// Afegir un component Rigidbody Rigidbody rb = myObject.AddComponent<Rigidbody>();
Detectant Col·lisions
Per detectar col·lisions, utilitzarem els mètodes proporcionats per Unity dins d'un script que hereti de MonoBehaviour
.
- OnCollisionEnter: Es crida quan comença una col·lisió.
- OnCollisionStay: Es crida mentre la col·lisió continua.
- OnCollisionExit: Es crida quan la col·lisió acaba.
Exemple de codi:
using UnityEngine; public class CollisionDetection : MonoBehaviour { void OnCollisionEnter(Collision collision) { Debug.Log("Col·lisió detectada amb: " + collision.gameObject.name); } void OnCollisionStay(Collision collision) { Debug.Log("Encara en col·lisió amb: " + collision.gameObject.name); } void OnCollisionExit(Collision collision) { Debug.Log("Col·lisió acabada amb: " + collision.gameObject.name); } }
Exercici Pràctic
Objectiu: Crear dos objectes que col·lideixin i detectar la col·lisió.
-
Crea dos objectes:
- Un cub i una esfera.
- Afegeix un
Box Collider
al cub i unSphere Collider
a l'esfera. - Afegeix un
Rigidbody
a l'esfera perquè es mogui.
-
Adjunta l'script de detecció de col·lisions:
- Crea un nou script anomenat
CollisionDetection
i copia el codi de l'exemple anterior. - Adjunta l'script al cub.
- Crea un nou script anomenat
-
Executa el joc:
- Mou l'esfera cap al cub i observa els missatges de la consola quan es produeix la col·lisió.
Solució de l'Exercici
using UnityEngine; public class CollisionDetection : MonoBehaviour { void OnCollisionEnter(Collision collision) { Debug.Log("Col·lisió detectada amb: " + collision.gameObject.name); } void OnCollisionStay(Collision collision) { Debug.Log("Encara en col·lisió amb: " + collision.gameObject.name); } void OnCollisionExit(Collision collision) { Debug.Log("Col·lisió acabada amb: " + collision.gameObject.name); } }
Errors Comuns i Consells
- Oblidar afegir un Rigidbody: Sense un
Rigidbody
, els objectes no seran afectats per la física i no es detectaran col·lisions. - No ajustar correctament els col·liders: Assegura't que els col·liders s'ajustin correctament a la forma dels teus objectes per evitar col·lisions inexactes.
- Desactivar els col·liders: Si un col·lider està desactivat, no es detectaran col·lisions.
Conclusió
La detecció de col·lisions és essencial per crear interaccions realistes en els jocs. Amb els coneixements adquirits en aquest tema, ja pots començar a implementar col·lisions bàsiques en els teus projectes de Unity. En el proper tema, explorarem com utilitzar materials de física per afegir més realisme a les col·lisions.
Curs de Unity
Mòdul 1: Introducció a Unity
- Introducció a Unity i Instal·lació
- Visió General de la Interfície de Unity
- Creant el Teu Primer Projecte
- Objectes de Joc Bàsics i Components
Mòdul 2: Programació Bàsica en Unity
- Introducció a C# per a Unity
- Creant i Adjuntant Scripts
- Entenent MonoBehaviour
- Gestió Bàsica d'Entrades
Mòdul 3: Treballant amb Actius
- Important i Gestionant Actius
- Utilitzant la Botiga d'Actius
- Creant i Utilitzant Prefabs
- Animació Bàsica
Mòdul 4: Física i Col·lisions
- Introducció a la Física de Unity
- Rigidbody i Col·liders
- Detecció Bàsica de Col·lisions
- Utilitzant Materials de Física
Mòdul 5: Interfície d'Usuari (UI)
- Introducció a la UI de Unity
- Creant i Personalitzant Elements de UI
- Gestió d'Esdeveniments de UI
- Creant Menús i HUDs
Mòdul 6: Àudio en Unity
- Introducció a l'Àudio en Unity
- Important i Utilitzant Clips d'Àudio
- Programació Bàsica d'Àudio
- Àudio 3D i So Espacial
Mòdul 7: Programació Avançada
- Conceptes Avançats de C# per a Unity
- Coroutines i Programació Asíncrona
- Objectes Scriptables
- Editors Personalitzats i Gizmos
Mòdul 8: Física Avançada i IA
- Tècniques Avançades de Física
- Pathfinding i Navegació
- Programació Bàsica d'IA
- Màquines d'Estats i Arbres de Comportament
Mòdul 9: Optimització i Rendiment
- Tècniques de Perfilat i Optimització
- Gestió de Memòria
- Reduint Draw Calls
- Optimitzant Física i Col·lisions