Tracking Player

개발 일지|2024. 12. 3. 12:02

GameState

  • GameMode
    • 게임 내의 모든 규칙을 가지고 있음
    • 플레이어의 레벨 이동이나 스폰 장소 선택 등 관리
    • PostLogin(APlayerController* NewPlayer) 라는 가상 함수를 상속받아 게임에 참여하는 playercontroller에 접근할 수 있음
    • Logout(AController* Exiting) 함수로 게임을 나가는 플레이어들의 playercontroller에 접근할 수 있음
  • GameState
    • GameMode보다 좀 더 게임 상태에 대한 정보를 가지고 있도록 디자인됨
    • 클라이언트가 GameState 클래스에 접근해 정보를 얻을 수 있음
    • 플레이어의 점수나 승리 횟수같은 개별 유저의 정보에만 국한되지 않고 게임 상태에 대한 정보를 담도록 디자인되었음
    • 플레이어 상태에 대한 배열을 가지고 있음. 얼마나 많은 플레이어가 들어와있는지도 이 배열의 수를 통해 파악할 수 있음

Login & Logout

  • GameModeBase에 구현
  • Login 함수와 Logout 함수를 override받아 사용
  • GameState 관련 로직 사용을 위해 두개의 전처리 include
#include "GameFramework/GameStateBase.h"
#include "GameFramework/PlayerState.h"
  • GameState가 가지고 있는 TArray plaeyer 배열을 사용해 접속하고 종료하는 플레이어 수, 이름을 가져옴
void ALobbyGameMode::PostLogin(APlayerController* NewPlayer)
{
	Super::PostLogin(NewPlayer);

	if (GameState) {
		int32 NumOfPlayer = GameState.Get()->PlayerArray.Num();

		if (GEngine) {
			GEngine->AddOnScreenDebugMessage(
				1,
				60.f,
				FColor::Yellow,
				FString::Printf(TEXT("Players in game: %d"), NumOfPlayer)
			);

			APlayerState* PlayerState = NewPlayer->GetPlayerState<APlayerState>();
			if (PlayerState) {
				FString PlayerName = PlayerState->GetPlayerName();
				GEngine->AddOnScreenDebugMessage(
					-1,
					60.f,
					FColor::Cyan,
					FString::Printf(TEXT("%s has joined the game!"), *PlayerName)
				);
			}
		}
	}
}

void ALobbyGameMode::Logout(AController* Exiting)
{
	Super::Logout(Exiting);

	APlayerState* PlayerState = Exiting->GetPlayerState<APlayerState>();

	if (PlayerState) {
		int32 NumOfPlayer = GameState.Get()->PlayerArray.Num();

		if (GEngine) {
			GEngine->AddOnScreenDebugMessage(
				1,
				60.f,
				FColor::Yellow,
				FString::Printf(TEXT("Players in game: %d"), NumOfPlayer - 1)
			);
		}

		FString PlayerName = PlayerState->GetPlayerName();
		GEngine->AddOnScreenDebugMessage(
			-1,
			60.f,
			FColor::Cyan,
			FString::Printf(TEXT("%s has exited the game!"), *PlayerName)
		);
	}
}
  • 이후 LobbyGameMode를 상속받은 BP_LobbyGameMode 클래스를 만들어 DefaultPawn을 firstplayerCharacter로 변경, LobbyMap의 defaultGameMode를 BP_LobbyGameMode로 변경

'개발 일지' 카테고리의 다른 글

플러그인 다듬기  (0) 2024.12.03
플러그인 UI - 2  (0) 2024.12.02
플러그인 UI - 1  (0) 2024.12.01
플러그인 등록  (0) 2024.11.30
Join Session  (0) 2024.11.29

댓글()