#GameMode
현재 레벨의 게임 규칙을 관리하는 객체
플레이어가 어떻게 스폰되는지
승리와 패배 조건이 무엇인지
게임이 어떤 방식으로 진행되는지 등을 담당한다.
생명 주기
게임 시작
|
v
MainMenu 레벨 로드
|
v
MainMenu GameMode 생성
|
v
Lobby 레벨 이동
|
v
MainMenu GameMode 소멸
|
v
Lobby GameMode 생성
|
v
Battle 레벨 이동
|
v
Lobby GameMode 소멸
|
v
Battle GameMode 생성
|
v
게임 종료
GameMode는 레벨마다 새롭게 생성된다.
레벨이 변경되면 기존 GameMode는 파괴되고
새로운 GameMode가 생성된다.
사용 목적
현재 레벨의 게임 규칙을 관리한다.
플레이어 관리
- 플레이어 스폰 위치 결정
- 기본 Pawn 지정
- PlayerController 지정
- HUD 지정
게임 규칙 관리
- 승리 조건
- 패배 조건
- 점수 계산
- 라운드 진행
게임 흐름 관리
- 게임 시작
- 게임 종료
- 재시작
- 라운드 전환
사용 예시
FPS 게임
- 플레이어가 죽으면 리스폰
- 킬 수 계산
- 승리 팀 결정
RTS 게임
- 자원 관리
- 승리 조건 판정
- 게임 종료 처리
MOBA 게임
- 넥서스 파괴 시 승리
- 팀 관리
- 플레이어 스폰 관리
코드 예시
class AMyGameMode : public AGameModeBase
{
GENERATED_BODY()
public:
virtual void BeginPlay() override;
};
주요 설정
Default Pawn Class
플레이어가 조종할 기본 Pawn
DefaultPawnClass = AMyCharacter::StaticClass();
PlayerController Class
플레이어 입력을 처리할 컨트롤러
PlayerControllerClass = AMyPlayerController::StaticClass();
HUD Class
게임 화면 UI
HUDClass = AMyHUD::StaticClass();
GameState Class
게임 상태 저장
GameStateClass = AMyGameState::StaticClass();
주요 함수
BeginPlay()
레벨 시작 시 호출
virtual void BeginPlay() override;
주로
- 게임 초기화
- 타이머 시작
- 게임 시작 이벤트
등을 수행한다.
PostLogin()
플레이어가 접속했을 때 호출
virtual void PostLogin(APlayerController* NewPlayer) override;
주로
- 플레이어 등록
- 팀 배정
- 플레이어 정보 초기화
등을 수행한다.
Logout()
플레이어가 나갔을 때 호출
virtual void Logout(AController* Exiting) override;
주로
- 플레이어 제거
- 팀 정보 갱신
- 게임 종료 체크
등을 수행한다.
RestartPlayer()
플레이어 리스폰
RestartPlayer(AController* NewPlayer);
주로
- 부활 처리
- 시작 위치 재배치
등을 수행한다.
특징
- 레벨마다 하나씩 존재한다.
- 레벨 변경 시 새로 생성된다.
- 현재 레벨의 규칙을 담당한다.
- 서버에만 존재한다.
- 클라이언트에서는 접근할 수 없다.
GameMode와 GameState
GameMode
게임 규칙 담당
예시
- 승리 조건
- 패배 조건
- 점수 계산
- 플레이어 스폰
서버에만 존재
GameState
게임 상태 저장
예시
- 남은 시간
- 현재 점수
- 현재 라운드
- 팀 점수
서버와 클라이언트 모두 존재
GameMode와 GameInstance 차이
| 구분 | GameMode | GameInstance |
|---|---|---|
| 생성 시점 | 레벨 시작 | 게임 시작 |
| 소멸 시점 | 레벨 종료 | 게임 종료 |
| 레벨 이동 시 | 새로 생성 | 유지 |
| 서버/클라이언트 | 서버만 존재 | 둘 다 존재 |
| 역할 | 게임 규칙 관리 | 전역 데이터 관리 |
GameMode는 월드(World)에 존재하는 Actor이다.
하지만 일반적으로 맵에 직접 배치하지 않고
레벨이 시작될 때 엔진이 자동으로 생성한다.
'언리얼 > 언리얼 학습' 카테고리의 다른 글
| FOnlineSessionSettings (0) | 2026.06.03 |
|---|---|
| FInputModeUIOnly (0) | 2026.06.02 |
| GameInstance (0) | 2026.06.01 |
| Delegate (델리게이트) (0) | 2026.06.01 |