En aquest mòdul, explorarem com Unreal Engine maneja la física i les col·lisions dins dels seus projectes. Aprendrem a configurar i utilitzar el motor de física per crear interaccions realistes entre objectes i a gestionar les col·lisions per detectar i respondre a les interaccions entre objectes dins del món del joc.

Continguts

Introducció a la Física en Unreal Engine

Unreal Engine utilitza el motor de física PhysX de NVIDIA per simular la física dins dels seus projectes. Aquest motor permet crear interaccions realistes entre objectes, com ara gravetat, fricció, forces i col·lisions.

Conceptes Clau

  • Rigid Bodies: Objectes que poden moure's i col·lisionar dins del món del joc.
  • Constraints: Restriccions que es poden aplicar als objectes per limitar els seus moviments.
  • Forces: Aplicació de forces per moure o afectar objectes dins del món del joc.

Configuració de la Física

Pas 1: Activar la Simulació de Física

  1. Selecciona l'objecte al qual vols aplicar la física.
  2. A la finestra de detalls, activa l'opció "Simulate Physics".

Pas 2: Configurar les Propietats de Física

  • Mass: Defineix la massa de l'objecte.
  • Linear Damping: Controla la fricció lineal de l'objecte.
  • Angular Damping: Controla la fricció angular de l'objecte.
// Exemple de codi per configurar la física en C++
UStaticMeshComponent* MeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComponent"));
MeshComponent->SetSimulatePhysics(true);
MeshComponent->SetMassOverrideInKg(NAME_None, 50.0f);
MeshComponent->SetLinearDamping(0.1f);
MeshComponent->SetAngularDamping(0.1f);

Tipus de Col·lisions

Col·lisions Simples

  • Box Collision: Una caixa que envolta l'objecte.
  • Sphere Collision: Una esfera que envolta l'objecte.
  • Capsule Collision: Una càpsula que envolta l'objecte.

Col·lisions Complexes

  • Convex Hull: Una forma convexa que envolta l'objecte.
  • Per-Poly Collision: Utilitza la geometria exacta de l'objecte per a les col·lisions.

Detecció de Col·lisions

Configuració de la Col·lisió

  1. Selecciona l'objecte al qual vols aplicar la col·lisió.
  2. A la finestra de detalls, activa l'opció "Collision".
  3. Defineix el tipus de col·lisió (Box, Sphere, Capsule, etc.).

Esdeveniments de Col·lisió

  • OnComponentHit: Es desencadena quan un objecte col·lisiona amb un altre.
  • OnComponentBeginOverlap: Es desencadena quan un objecte comença a superposar-se amb un altre.
  • OnComponentEndOverlap: Es desencadena quan un objecte deixa de superposar-se amb un altre.
// Exemple de codi per detectar col·lisions en C++
MeshComponent->OnComponentHit.AddDynamic(this, &AMyActor::OnHit);

void AMyActor::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
{
    // Codi per gestionar la col·lisió
}

Respostes a les Col·lisions

Aplicació de Forces

  • AddForce: Aplica una força a l'objecte.
  • AddImpulse: Aplica un impuls a l'objecte.
// Exemple de codi per aplicar una força en C++
MeshComponent->AddForce(FVector(1000.0f, 0.0f, 0.0f));

Reaccions Personalitzades

  • Destruir Objectes: Destruir un objecte quan col·lisiona amb un altre.
  • Generar Partícules: Generar efectes de partícules en col·lisionar.
// Exemple de codi per destruir un objecte en col·lisionar
void AMyActor::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
{
    if (OtherActor != nullptr)
    {
        OtherActor->Destroy();
    }
}

Exemples Pràctics

Exemple 1: Bola que Rebota

  1. Crea una esfera i activa la simulació de física.
  2. Configura la col·lisió com a "Sphere Collision".
  3. Aplica una força inicial per fer que la bola reboti.

Exemple 2: Porta que S'obre en Col·lisionar

  1. Crea una porta i activa la simulació de física.
  2. Configura la col·lisió com a "Box Collision".
  3. Utilitza l'esdeveniment "OnComponentHit" per aplicar una força que obri la porta.

Exercicis Pràctics

Exercici 1: Crear un Objecte que Rebota

  1. Crea un objecte que simuli una pilota de bàsquet.
  2. Configura la física i la col·lisió per fer que la pilota reboti de manera realista.
  3. Aplica una força inicial per llançar la pilota.

Exercici 2: Crear una Trampa que Destrueix Objectes

  1. Crea una trampa que destrueixi qualsevol objecte que hi col·lisioni.
  2. Configura la col·lisió per detectar quan un objecte entra en contacte amb la trampa.
  3. Utilitza l'esdeveniment "OnComponentHit" per destruir l'objecte col·lisionat.

Solucions

Exercici 1: Crear un Objecte que Rebota

// Configuració de la física per a una pilota de bàsquet
UStaticMeshComponent* Basketball = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Basketball"));
Basketball->SetSimulatePhysics(true);
Basketball->SetMassOverrideInKg(NAME_None, 0.6f); // Massa aproximada d'una pilota de bàsquet
Basketball->SetLinearDamping(0.1f);
Basketball->SetAngularDamping(0.1f);
Basketball->SetCollisionProfileName(TEXT("PhysicsActor"));

// Aplicar una força inicial
Basketball->AddImpulse(FVector(1000.0f, 0.0f, 500.0f));

Exercici 2: Crear una Trampa que Destrueix Objectes

// Configuració de la col·lisió per a una trampa
UStaticMeshComponent* Trap = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Trap"));
Trap->SetCollisionProfileName(TEXT("OverlapAllDynamic"));
Trap->OnComponentHit.AddDynamic(this, &AMyTrap::OnHit);

void AMyTrap::OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
{
    if (OtherActor != nullptr)
    {
        OtherActor->Destroy();
    }
}

Conclusió

En aquesta secció, hem après a configurar i utilitzar la física i les col·lisions en Unreal Engine. Hem explorat com activar la simulació de física, configurar les propietats de física, definir tipus de col·lisions, detectar col·lisions i respondre-hi. A més, hem vist exemples pràctics i exercicis per reforçar els conceptes apresos. Amb aquests coneixements, estàs preparat per crear interaccions realistes i dinàmiques dins dels teus projectes d'Unreal Engine.

© Copyright 2024. Tots els drets reservats