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
- Selecciona l'objecte al qual vols aplicar la física.
- 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ó
- Selecciona l'objecte al qual vols aplicar la col·lisió.
- A la finestra de detalls, activa l'opció "Collision".
- 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
- Crea una esfera i activa la simulació de física.
- Configura la col·lisió com a "Sphere Collision".
- Aplica una força inicial per fer que la bola reboti.
Exemple 2: Porta que S'obre en Col·lisionar
- Crea una porta i activa la simulació de física.
- Configura la col·lisió com a "Box Collision".
- Utilitza l'esdeveniment "OnComponentHit" per aplicar una força que obri la porta.
Exercicis Pràctics
Exercici 1: Crear un Objecte que Rebota
- Crea un objecte que simuli una pilota de bàsquet.
- Configura la física i la col·lisió per fer que la pilota reboti de manera realista.
- Aplica una força inicial per llançar la pilota.
Exercici 2: Crear una Trampa que Destrueix Objectes
- Crea una trampa que destrueixi qualsevol objecte que hi col·lisioni.
- Configura la col·lisió per detectar quan un objecte entra en contacte amb la trampa.
- 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.
Curs d'Unreal Engine
Mòdul 1: Introducció a Unreal Engine
- Què és Unreal Engine?
- Instal·lant Unreal Engine
- Navegant per la Interfície
- Creant el teu Primer Projecte
Mòdul 2: Conceptes Bàsics
Mòdul 3: Blueprints Intermedis
- Variables i Tipus de Dades
- Funcions i Esdeveniments
- Comunicació entre Blueprints
- Creant Objectes Interactius
Mòdul 4: Blueprints Avançats
Mòdul 5: Programació en C++ a Unreal Engine
- Configurant el teu Entorn de Desenvolupament
- Sintaxi Bàsica de C++
- Creant Classes en C++
- Integrant C++ amb Blueprints
Mòdul 6: Programació Avançada en C++
Mòdul 7: Temes Avançats
- Física i Col·lisió
- Renderització i Postprocessament
- Generació de Contingut Procedural
- Desenvolupament de Realitat Virtual