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

  1. Col·liders: Components que defineixen la forma d'un objecte per a la detecció de col·lisions.
  2. Rigidbody: Component que permet que un objecte sigui afectat per la física.
  3. 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

  1. 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
    
  2. 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.

  1. OnCollisionEnter: Es crida quan comença una col·lisió.
  2. OnCollisionStay: Es crida mentre la col·lisió continua.
  3. 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ó.

  1. Crea dos objectes:

    • Un cub i una esfera.
    • Afegeix un Box Collider al cub i un Sphere Collider a l'esfera.
    • Afegeix un Rigidbody a l'esfera perquè es mogui.
  2. 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.
  3. 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

Mòdul 2: Programació Bàsica en Unity

Mòdul 3: Treballant amb Actius

Mòdul 4: Física i Col·lisions

Mòdul 5: Interfície d'Usuari (UI)

Mòdul 6: Àudio en Unity

Mòdul 7: Programació Avançada

Mòdul 8: Física Avançada i IA

Mòdul 9: Optimització i Rendiment

Mòdul 10: Publicació i Més Enllà

© Copyright 2024. Tots els drets reservats