Black Hole Challenge: C++/Blueprints
Black Hole Challenge es el primer reto propuesto por el curso Unreal Engine 4 Mastery: Create Multiplayer Games with C++ de Tom Looman certificado por Epic Games disponible en la plataforma Udemy.
A lo largo del curso se desarrollarán dos juegos con base en C++ y extendiendo la funcionalidad con Blueprints. Los dos juegos son multijugador y se profundizará también en AI y para reforzar los diferentes temas se proponen distintos retos. En esta ocasión hay que prototipar un agujero negro que atraiga y destruya los objetos físicos que estén en su campo de acción para posteriormente implementarlo en C++.
UPROPERTY(VisibleAnywhere, Category = "Components") UStaticMeshComponent* MeshComp; UPROPERTY(VisibleAnywhere, Category = "Components") USphereComponent* SphereGravityComp; UPROPERTY(VisibleAnywhere, Category = "Components") USphereComponent* SphereDestroyComp; void checkNearbyActors(); // Marked with ufunction to bind to overlap event UFUNCTION() void OverlapInnerSphere(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
ABlackHoleBase::ABlackHoleBase()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
MeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComp"));
MeshComp->SetCollisionEnabled(ECollisionEnabled::NoCollision);
RootComponent = MeshComp;
SphereGravityComp = CreateDefaultSubobject<USphereComponent>(TEXT("SphereGravComp"));
SphereGravityComp->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
SphereGravityComp->SetupAttachment(MeshComp);
SphereDestroyComp = CreateDefaultSubobject<USphereComponent>(TEXT("SphereDesComp"));
SphereDestroyComp->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
SphereDestroyComp->SetupAttachment(MeshComp);
// Bind to Event
SphereDestroyComp->OnComponentBeginOverlap.AddDynamic(this, &ABlackHoleBase::OverlapInnerSphere);
}
void ABlackHoleBase::checkNearbyActors()
{
TArray<UPrimitiveComponent*> OverlapingActorsGravity;
SphereGravityComp->GetOverlappingComponents(OverlapingActorsGravity);
for (int32 i = 0; i < OverlapingActorsGravity.Num(); i++)
{
UPrimitiveComponent* primitive = OverlapingActorsGravity[i];
if (primitive && primitive->IsSimulatingPhysics())
{
const float SphereRadius = SphereGravityComp->GetScaledSphereRadius();
const float ForceStrength = -2000; // Negative value to make it pull towards the origin instead of pushing away
primitive->AddRadialForce(GetActorLocation(), SphereRadius, ForceStrength, ERadialImpulseFalloff::RIF_Constant, true);
}
}
}
void ABlackHoleBase::OverlapInnerSphere(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
if (OtherActor)
{
OtherActor->Destroy();
}
}
A continuación os dejaré los enlaces al código, demo y al video en youtube para que podáis ver más. De momento me está gustando el curso pero al final compartiré una valoración general por si a alguien le pueda interesar que sepa más o menos que esperar del mismo.
Repositorio: Black Hole Challenge: C++/Blueprints [project]
Demo: Black Hole Challenge: C++/Blueprints [demo]
Curso: Unreal Engine 4 Mastery: Create Multiplayer Games with C++

Lvl 35 | #Porting #GameDev en Catness Game Studios | Ex #AI #GameDev en The Crown of Wu de Red Mountain | Padre de Baby T-Rex.
