Multiplayer Horde Mode Gameloop: C++/Blueprints
Multiplayer Horde Mode Gameloop: C++/Blueprints, gameloop base del segundo juego del 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 parte se ha creado el gameloop base del juego utilizando las clases:
- GameMode: Para gestionar la creación de oleadas de enemigos.
- GameState: Para comunicar a los clientes el estado de las oleadas.
- PlayerState: Para poder sumar puntos por muerte de enemigos a los jugadores.
- EQS: Utilización de EQS para hacer spawn de los enemigos teniendo en cuenta la distancia con respecto a los jugadores.
- Nociones básicas de BSP-Tools para crear el escenario.
- Respawn de jugadores si un jugador completa la oleada o Game Over si mueren todos.
Destacado ASGameMode .h .cpp
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnActorKilled, AActor*, VictimActor, AActor*, KillerActor, AController*, KillerController);
UPROPERTY(BlueprintAssignable, Category = "GameMode")
FOnActorKilled OnActorKilled;
void ASGameMode::CheckWaveState()
{
bool bIsPreparingForWave = GetWorldTimerManager().IsTimerActive(TimerHandle_NextWaveStart);
if (NrOfBotsToSpawn > 0 || bIsPreparingForWave)
{
return;
}
bool bIsAnyBotAlive = false;
for (FConstPawnIterator It = GetWorld()->GetPawnIterator(); It; It++)
{
APawn* TestPawn = It->Get();
if (TestPawn == nullptr || TestPawn->IsPlayerControlled())
{
continue;
}
USHealthComponent* HealthComp = Cast<USHealthComponent>(TestPawn->GetComponentByClass(USHealthComponent::StaticClass()));
if (HealthComp && HealthComp->GetHealth() > 0.0f)
{
bIsAnyBotAlive = true;
break;
}
}
if (!bIsAnyBotAlive)
{
SetWaveState(EWaveState::WaveComplete);
PrepareForNextWave();
}
}
Destacado ASGameState .h .cpp
UENUM(BlueprintType)
enum class EWaveState : uint8
{
WaitingToStart,
WaveInProgress,
// No longer spawning new bots, waiting for players to kill remaining bots
WaitingToComplete,
WaveComplete,
GameOver,
};
UFUNCTION(BlueprintImplementableEvent, Category = "GameState")
void WaveStateChanged(EWaveState NewState, EWaveState OldState);
void ASGameState::SetWaveState(EWaveState NewState)
{
if (Role == ROLE_Authority)
{
EWaveState OldState = WaveState;
WaveState = NewState;
// Call on server
OnRep_WaveState(OldState);
}
}
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: Multiplayer Horde Mode Gameloop: C++/Blueprints [project]
Demo: Multiplayer Horde Mode Gameloop: C++/Blueprints [demo]
Curso: Unreal Engine 4 Mastery: Create Multiplayer Games with C++

Lvl 37 | Former #Porting #GameDev at Catness Game Studios | Former #GameDev on The Crown of Wu by Red Mountain | Father of a Baby T-Rex.
