En aquest tema, explorarem tècniques avançades de física en Unity que et permetran crear comportaments més realistes i complexos en els teus jocs. Aquestes tècniques inclouen l'ús avançat de Rigidbody, col·lisions, forces, i altres components de física.

Continguts

  1. Rigidbody Avançat
  2. Forces i Moments
  3. Joints (Articulacions)
  4. Simulació de Fluids
  5. Optimització de Física

  1. Rigidbody Avançat

Explicació

El component Rigidbody és fonamental per a la física en Unity. A més de les propietats bàsiques com la massa, la gravetat i la velocitat, hi ha altres propietats i mètodes que poden ser utilitzats per aconseguir comportaments més avançats.

Propietats Avançades

  • Drag: Controla la resistència de l'aire que afecta el moviment de l'objecte.
  • Angular Drag: Controla la resistència de l'aire que afecta la rotació de l'objecte.
  • Interpolation: Millora la suavitat del moviment de l'objecte.
  • Collision Detection: Modes de detecció de col·lisions (Discrete, Continuous, Continuous Dynamic).

Exemple de Codi

using UnityEngine;

public class AdvancedRigidbody : MonoBehaviour
{
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.mass = 2.0f;
        rb.drag = 0.5f;
        rb.angularDrag = 0.05f;
        rb.interpolation = RigidbodyInterpolation.Interpolate;
        rb.collisionDetectionMode = CollisionDetectionMode.Continuous;
    }
}

Explicació del Codi

  • mass: Estableix la massa del Rigidbody a 2.0.
  • drag: Estableix la resistència de l'aire a 0.5.
  • angularDrag: Estableix la resistència angular a 0.05.
  • interpolation: Activa la interpolació per a un moviment més suau.
  • collisionDetectionMode: Estableix el mode de detecció de col·lisions a Continuous.

  1. Forces i Moments

Explicació

Les forces i els moments (torques) són essencials per simular moviments realistes. Unity proporciona diversos mètodes per aplicar forces i moments als Rigidbody.

Mètodes Clau

  • AddForce: Aplica una força a l'objecte.
  • AddTorque: Aplica un moment (torque) a l'objecte.
  • AddExplosionForce: Aplica una força explosiva a l'objecte.

Exemple de Codi

using UnityEngine;

public class ApplyForces : MonoBehaviour
{
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.AddForce(Vector3.up * 10.0f, ForceMode.Impulse);
        }

        if (Input.GetKeyDown(KeyCode.T))
        {
            rb.AddTorque(Vector3.right * 5.0f, ForceMode.Impulse);
        }
    }
}

Explicació del Codi

  • AddForce: Aplica una força impulsiva cap amunt quan es prem la tecla espai.
  • AddTorque: Aplica un moment impulsiu al voltant de l'eix X quan es prem la tecla T.

  1. Joints (Articulacions)

Explicació

Les articulacions (Joints) permeten connectar dos Rigidbody i definir com es mouen l'un respecte a l'altre. Unity ofereix diversos tipus d'articulacions, com ara HingeJoint, SpringJoint, i FixedJoint.

Tipus d'Articulacions

  • HingeJoint: Permet la rotació al voltant d'un eix.
  • SpringJoint: Connecta dos objectes amb una molla.
  • FixedJoint: Connecta dos objectes de manera fixa.

Exemple de Codi

using UnityEngine;

public class SetupHingeJoint : MonoBehaviour
{
    void Start()
    {
        HingeJoint hinge = gameObject.AddComponent<HingeJoint>();
        hinge.anchor = Vector3.zero;
        hinge.axis = Vector3.right;
        hinge.useSpring = true;

        JointSpring spring = new JointSpring();
        spring.spring = 10.0f;
        spring.damper = 1.0f;
        spring.targetPosition = 0.0f;

        hinge.spring = spring;
    }
}

Explicació del Codi

  • HingeJoint: Afegeix una articulació de frontissa a l'objecte.
  • anchor: Estableix el punt d'ancoratge de l'articulació.
  • axis: Defineix l'eix de rotació.
  • useSpring: Activa l'ús de la molla.
  • JointSpring: Configura les propietats de la molla (força, amortiment, posició objectiu).

  1. Simulació de Fluids

Explicació

La simulació de fluids és una tècnica avançada que pot ser utilitzada per crear efectes com aigua, fum, o altres fluids. Unity no té suport natiu per a la simulació de fluids, però es poden utilitzar plugins o scripts personalitzats.

Exemple de Plugin

Un dels plugins més populars per a la simulació de fluids en Unity és Obi Fluid. Aquest plugin permet simular fluids de manera realista.

Exemple de Codi (Utilitzant Obi Fluid)

// Aquest codi és un exemple simplificat de com configurar Obi Fluid
using Obi;
using UnityEngine;

public class SetupFluid : MonoBehaviour
{
    public ObiSolver solver;
    public ObiEmitter emitter;

    void Start()
    {
        solver = gameObject.AddComponent<ObiSolver>();
        emitter = gameObject.AddComponent<ObiEmitter>();

        emitter.solver = solver;
        emitter.emissionRate = 1000;
    }
}

Explicació del Codi

  • ObiSolver: Component que resol la física del fluid.
  • ObiEmitter: Component que emet partícules de fluid.
  • emissionRate: Estableix la taxa d'emissió de partícules.

  1. Optimització de Física

Explicació

La física pot ser costosa en termes de rendiment, especialment en jocs complexos. És important optimitzar la física per assegurar un rendiment suau.

Consells d'Optimització

  • Utilitza col·liders simples: Prefereix col·liders primitives (caixes, esferes) en lloc de col·liders complexos.
  • Redueix la taxa de simulació: Ajusta la taxa de simulació de física (Fixed Timestep) en els paràmetres del projecte.
  • Desactiva la física innecessària: Desactiva components de física en objectes que no necessiten ser simulats.
  • Utilitza Rigidbody cinemàtics: Per a objectes que es mouen de manera previsible, utilitza Rigidbody cinemàtics.

Exemple de Codi

using UnityEngine;

public class OptimizePhysics : MonoBehaviour
{
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        rb.isKinematic = true; // Desactiva la simulació de física
    }
}

Explicació del Codi

  • isKinematic: Estableix el Rigidbody com a cinemàtic, desactivant la simulació de física.

Conclusió

En aquest tema, hem explorat diverses tècniques avançades de física en Unity, incloent l'ús avançat de Rigidbody, l'aplicació de forces i moments, l'ús d'articulacions, la simulació de fluids, i l'optimització de la física. Aquestes tècniques et permetran crear comportaments més realistes i complexos en els teus jocs, millorant l'experiència del jugador.

Exercicis Pràctics

  1. Experimenta amb Forces: Crea un script que aplici diferents tipus de forces a un objecte i observa els resultats.
  2. Configura una Articulació: Afegeix una articulació de frontissa entre dos objectes i ajusta les propietats de la molla.
  3. Simula Fluids: Utilitza un plugin com Obi Fluid per crear una simulació de fluids en el teu projecte.
  4. Optimitza la Física: Identifica i implementa almenys tres tècniques d'optimització de física en un projecte existent.

Solucions

Les solucions als exercicis pràctics es poden trobar en els arxius adjunts del curs o en la documentació oficial de Unity i els plugins utilitzats.

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