En aquest tema, explorarem dos components fonamentals per a la física en Unity: els Rigidbody i els Col·liders. Aquests components són essencials per crear interaccions físiques realistes en els teus jocs.

  1. Què és un Rigidbody?

Un Rigidbody és un component que permet que un objecte de joc sigui afectat per la física del motor de Unity. Això inclou la gravetat, les forces, els moments i les col·lisions.

Propietats Principals del Rigidbody

  • Mass (Massa): Determina la massa de l'objecte. Una massa més gran farà que l'objecte sigui més difícil de moure.
  • Drag (Resistència): Controla la resistència de l'objecte al moviment lineal.
  • Angular Drag (Resistència Angular): Controla la resistència de l'objecte al moviment rotacional.
  • Use Gravity (Usar Gravetat): Si està activat, l'objecte serà afectat per la gravetat.
  • Is Kinematic (És Cinemàtic): Si està activat, l'objecte no serà afectat per les forces físiques, però encara pot moure's i col·lisionar amb altres objectes.

Exemple de Codi: Afegint un Rigidbody

using UnityEngine;

public class AddRigidbody : MonoBehaviour
{
    void Start()
    {
        // Afegir un component Rigidbody a l'objecte de joc
        Rigidbody rb = gameObject.AddComponent<Rigidbody>();
        
        // Configurar algunes propietats del Rigidbody
        rb.mass = 2.0f;
        rb.drag = 0.5f;
        rb.angularDrag = 0.05f;
        rb.useGravity = true;
    }
}

  1. Què és un Col·lider?

Un Col·lider és un component que defineix la forma de l'objecte per a la detecció de col·lisions. Els col·liders poden ser de diverses formes, com ara caixes, esferes, càpsules i malles personalitzades.

Tipus de Col·liders

  • Box Collider (Col·lider de Caixa): Una caixa tridimensional.
  • Sphere Collider (Col·lider d'Esfera): Una esfera tridimensional.
  • Capsule Collider (Col·lider de Càpsula): Una càpsula tridimensional.
  • Mesh Collider (Col·lider de Malla): Una malla personalitzada que segueix la forma del model 3D.

Exemple de Codi: Afegint un Col·lider

using UnityEngine;

public class AddCollider : MonoBehaviour
{
    void Start()
    {
        // Afegir un component Box Collider a l'objecte de joc
        BoxCollider boxCollider = gameObject.AddComponent<BoxCollider>();
        
        // Configurar algunes propietats del Box Collider
        boxCollider.size = new Vector3(1.0f, 1.0f, 1.0f);
        boxCollider.isTrigger = false;
    }
}

  1. Interacció entre Rigidbody i Col·liders

Quan un objecte té tant un Rigidbody com un Col·lider, pot interactuar amb altres objectes físics en l'escena. El Rigidbody permet que l'objecte sigui afectat per forces físiques, mentre que el Col·lider defineix la seva forma per a la detecció de col·lisions.

Exemple de Codi: Interacció entre Rigidbody i Col·liders

using UnityEngine;

public class RigidbodyColliderInteraction : MonoBehaviour
{
    void Start()
    {
        // Afegir un component Rigidbody a l'objecte de joc
        Rigidbody rb = gameObject.AddComponent<Rigidbody>();
        
        // Afegir un component Sphere Collider a l'objecte de joc
        SphereCollider sphereCollider = gameObject.AddComponent<SphereCollider>();
        
        // Configurar algunes propietats del Rigidbody
        rb.mass = 1.0f;
        rb.drag = 0.1f;
        rb.angularDrag = 0.05f;
        rb.useGravity = true;
        
        // Configurar algunes propietats del Sphere Collider
        sphereCollider.radius = 0.5f;
        sphereCollider.isTrigger = false;
    }
}

  1. Exercicis Pràctics

Exercici 1: Afegir Rigidbody i Col·liders

  1. Crea un nou projecte de Unity.
  2. Afegeix un objecte de joc (per exemple, un cub) a l'escena.
  3. Escriu un script que afegeixi un component Rigidbody i un Box Collider a l'objecte de joc.
  4. Configura les propietats del Rigidbody i del Box Collider segons les teves preferències.

Solució de l'Exercici 1

using UnityEngine;

public class ExerciseSolution : MonoBehaviour
{
    void Start()
    {
        // Afegir un component Rigidbody a l'objecte de joc
        Rigidbody rb = gameObject.AddComponent<Rigidbody>();
        
        // Afegir un component Box Collider a l'objecte de joc
        BoxCollider boxCollider = gameObject.AddComponent<BoxCollider>();
        
        // Configurar algunes propietats del Rigidbody
        rb.mass = 1.0f;
        rb.drag = 0.1f;
        rb.angularDrag = 0.05f;
        rb.useGravity = true;
        
        // Configurar algunes propietats del Box Collider
        boxCollider.size = new Vector3(1.0f, 1.0f, 1.0f);
        boxCollider.isTrigger = false;
    }
}

  1. Errors Comuns i Consells

Errors Comuns

  • Oblidar afegir un Col·lider: Sense un col·lider, l'objecte no podrà detectar col·lisions.
  • Configurar incorrectament les propietats del Rigidbody: Ajustar massa, drag o angular drag incorrectament pot fer que l'objecte es comporti de manera estranya.
  • No activar Use Gravity: Si vols que l'objecte sigui afectat per la gravetat, assegura't que aquesta opció estigui activada.

Consells

  • Experimenta amb les propietats: Prova diferents valors per a les propietats del Rigidbody i del Col·lider per veure com afecten el comportament de l'objecte.
  • Utilitza Gizmos: Unity proporciona eines visuals (Gizmos) per veure els col·liders en l'editor, cosa que pot ajudar a ajustar la seva mida i posició.

Conclusió

En aquesta secció, hem après sobre els components Rigidbody i Col·liders, que són essencials per a la física en Unity. Hem vist com afegir i configurar aquests components mitjançant codi i hem practicat amb un exercici pràctic. Amb aquests coneixements, estàs preparat per crear interaccions físiques més realistes en els teus jocs. En la següent secció, explorarem la detecció bàsica de 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