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 35 | #Porting #GameDev en Catness Game Studios | Ex #AI #GameDev en The Crown of Wu de Red Mountain | Padre de Baby T-Rex.