코가손의 블로그

언리얼 게임 프레임워크 본문

GameDevLog/UnrealEngine5

언리얼 게임 프레임워크

Cogason 2023. 6. 21. 18:10

GameMode : 게임의 규칙

- 결승선을 통과하면 A가 이긴다

 

PlayerController : 플레이어 셋업

- Pawn을 Posses하여 컨트롤

- Pawn은 게임 내 물리적 표현, Controller는 물리적 동작에 대한 규칙 설정

- Character는 인간형 Pawn

 

Pawn자체에 이동이나 게임로직을 포함시키는거 가능

또한 Controller에도 포함시킬 수 있음, PlayerController 와 AIController로 나뉨

 

게임플레이 프레임워크 간단 레퍼런스

GameMode - 서버에만 존재

 

GameState - 서버, 클라이언트 모두 존재

- 플레이어 목록, 점수, 체크 게임에서 말들의 위치, 오픈 월드 게임에서 완료한 퀘스트 목록 등이 포함

- 최신상태 유지를 위해 리플리케이트

 

PlayerState - 모든 머신에 모든 PlayerState존재

- 게임 참여자의 상태 정의

- AI에는 없음

- 플레이어 이름, 점수, 대전상대 레벨, CTF게임에서 깃발을 운반중인지 체크

게임 흐름 개요

에디터에서 시작 vs LaunchGame, Standalone

PIE

- 엔진초기화는 이미 되어있음

- Eidtor Start버튼 클릭 > GameInstance생성 >  GameInstance Init()

 

Standalone

- 엔진 초기화 > GameInstance생성  > Initialize Standalone >  GameInstance Init()

- (UEngine) Start 직후 맵을 로드

 

UWrod클래스의 BeginPlay()시점부터는 PIE와 Standalone의 흐름 일치

 

GameMode & GameState

GameMode

- 총 플레이어 수, 관전자 수 관리

- OnPostLogin, OnLogout, 액터 스폰 위치, 규칙, 리스폰

- 일시정지 여부, 일시정지 처리방식

- 레벨 전환 , 시네마틱 모드 시작 여부

 

GameState

- 게임 실행 시간

- 각 플레이어의 게임 참가 시간, 플레이어 현 상태

- 현재 게임모드의 베이스 클래스

- 게임 시작 여부

 

GameMode클래스 종류는 GameMode와 GameModeBase, GameMode를 단순화 한게 GameModeBase

GameModeBase가 부모, GameMode가 자식 클래스로 구성되어 있음

 

GameModeBase

- InitGame

- PreLogin : Login전에 호출됨, Login시도 플레이어 거부 가능, Login이전에 게임 콘텐츠를 다운한다면

콘텐츠를 한참 다운로드하고 Login실패되는 상황 발생할 수 있음

- PostLogin : 로그인 성공하고 호출됨

- HandleStartingNewPlayer : PostLogin혹은 SeamlessTravel이후 호출됨, 폰의 스폰위치를 지정하는데 주로 쓰임(RestartPlayerAtPlayerStart, RestartPlayerAtTransform, OnRestartPlayer)

- SpawnDefaultPawnAtTransform : 플레이어 폰이 실제 스폰되는 곳

- Logout : 플레이어가 떠날 때 호출됨

 

GameMode, GameModeBase모두 UGameEngine::LoadMap()으로 레벨을 초기화 할 때마다 재생성됨

 

GameMode

- MatchState다루기에 적절

- Enteringmap : 월드 초기화되지 않은 상태

- WaitingToStart : 플레이어 컨트롤러 생성됨, 폰은 생성안됨, HandleMatchIsWaitingToStart호출됨,  ReadyToStartMatch true반환 시 StartMatch호출되어 다음 상태로 전환

- InProgress : HandleMatchHasStarted호출되며 모든 엑터에서 BeginPlay()호출됨, ReadyToEndMatch가 true를 반환 혹은 EndMatch호출될 경우 다음 상태로 전환

- WaitingToPostMatch : HandleMatchHasEnded호출됨, 새 플레이어 참가 불가능, 맵 전환이 일어나면 다음 상태로 전환

- LeavingMap : 게임 흐름의 마지막 상태, HandleLeavingMap호출됨, EnteringMap상태로 진입

- Aborted - 경기 중단시 호출됨

 

여러 게임상태를 정의하고 싶은 경우 InProgress상태를 덮어쓸것

 

GameState

- 특정 플레이어 점수 몇점인가? no, 개별적인 정보는 PlayerState에서 처리

- 모든 유저에게 Replicate되기 때문에 플레이어들 모두에게 관련이 있는 정보를 기록&업데이트

- GetServerWorldTimeSeconds : 클라이언트와 서버 양쪽에서 도익화되는 믿을 수 있는 현재시간

- PlayerArray : 모든 PlayerState의 Array

- HasBegunPlay : 게임의 엑터에 대해 BeginPlay가 호출된 경우 true

 

 

 

Comments