코가손의 블로그
언리얼 게임 프레임워크 본문
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
'GameDevLog > UnrealEngine5' 카테고리의 다른 글
언리얼C++ 오브젝트 생성, 애셋 레퍼런싱, 애셋 로딩 (0) | 2023.07.08 |
---|---|
[ DevLog ] MultiplayerShooter#05 멀티 환경의 무기 픽업 위젯 띄우기(Repilicate, RepNotify) (0) | 2023.04.17 |
[ DevLog ] MultiplayerShooter#04 유저 접속 (0) | 2023.04.14 |
[ DevLog ] MultiplayerShooter#03 발광 텍스쳐 (0) | 2023.04.14 |
[ DevLog ] MultiplayerShooter#02 입력방향을 따라 회전하는 캐릭터 (0) | 2023.04.14 |