게임을 시작하면 무슨 일이 벌어지는가?
1. 월드가 생성된다.
2. 월드에 레벨을 로딩한다.
3. 지정한 규칙에 따라 로컬 플레이어를 입장시킨다.
4. 플레이어에 관련된 다양한 물체가 생성된다.
프레임워크 클래스 관계
이 흐름도는 이러한 코어 게임플레이 클래스끼리의 상관 관계를 나타냅니다.
게임은 GameMode 와 GameState 로 이루어집니다.
게임에 참여하는 사람 플레이어는 PlayerController 에 연관됩니다. 이러한 PlayerController 는 플레이어가 레벨 내 물리적 존재를 가질 수 있도록 Pawn 에 빙의됩니다.
PlayerController 는 플레이어에게 입력 컨트롤, 헤드업 디스플레이 (HUD), 카메라 시야 처리를 위한 PlayerCameraManager 등을 줄 수 있습니다.
게임 프레임워크의 바탕은 GameMode 입니다.
GameMode 에서는 게임의 규칙을 설정, 예제에선 결승선을 먼저 통과하는 플레이어가 이기는 규칙입니다.
플레이어 스폰 처리도 여기서 합니다.
플레이어 셋업이 이루어지는 곳은 PlayerController 로, 이것이 Pawn 을 빙의(possess)합니다.
Pawn 은 게임 내 플레이어의 물리적 표현인 반면, Controller 는 Pawn 에 빙의되어 그 동작에 대한 규칙을 설정할 수 있습니다.
우리 예제에서는 Pawn 이 둘 있는데, 하나는 달팽이이고 하나는 토끼입니다. 토끼는 사실상 Character 가 되는데, 이는 Pawn 의 특수한 서브클래스로 달리기나 점프같은 이동 함수성이 내장되어 있습니다. 반면 달팽이는 이동 방식이 다르기 때문에 Pawn 클래스를 직접 확장하면 됩니다.
Pawn 자체에 이동이나 기타 게임 로직용 규칙을 포함시킬 수는 있지만, 그러한 함수성은 Controller 에 포함시킬 수도 있습니다. Controller 는 사람 플레이어의 입력을 받는 PlayerController아니면 컴퓨터의 자동 제어를 받는 AIController 가 될 수도 있습니다.
이 예제에서 플레이어는 달팽이를 제어할 것이기에, 달팽이 Pawn 은 PlayerController 에 빙의됩니다. 토끼는 AI 의 제어를 받는데, 언제 멈추고 달리고 낮잠을 잘 것인지 하는 규칙은 모두 AIController 에 설정되어 있으며,
이 컨트롤러가 토끼 Character 에 빙의됩니다. Camera 에 제공되는 시야는 사람 플레이어에게만 의미가 있으므로, 달팽이 Pawn 에 있는 CameraComponent 하나만 PlayerCamera 에 사용될 것입니다.
게임플레이 도중 플레이어에게 받은 Input 으로 맵 위의 달팽이를 이리저리 움직이면서, Camera 로 제공된 뷰 위에 겹쳐놓인 HUD 에 누가 처음으로 들어왔는지, 경과된 경주 시간은 얼마나 되는지가 표시됩니다.
월드에 플레이어, 아군, 적군 표시
Pawn |
폰 이란 월드의 대리인 역할을 하는 Actor 입니다. Pawn 은 Controller 에 의해 possess(빙의) 가능하며, 입력을 쉽게 받을 수 있도록 구성 가능하고, 여러가지 다양한 플레이어같은 동작을 할 수 있습니다. 참고로 Pawn 은 인간형이라 가정되지 않습니다. |
Character |
캐릭터 는 인간형 Pawn 입니다. 기본적으로 콜리전에 쓸 CapsuleComponent 와 CharacterMovementComponent 가 들어있습니다. 기본적인 인간형 동작을 할 수 있으며, 네트워크를 통해 부드러운 이동 리플리케이션이 가능하고, 애니메이션 관련 함수성도 약간 있습니다. |
플레이어 인풋 또는 AI 로직으로 폰 제어하기
Controller |
컨트롤러 는 Pawn 에 대한 지시를 담당하는 Actor 입니다. 보통 두 가지 형태로 등장하는데, AIController 와 PlayerController 입니다. 컨트롤러는 Pawn 에 "possess"(빙의)되어 그 폰을 제어할 수 있습니다. |
PlayerController |
플레이어 컨트롤러 는 Pawn 과 그것을 제어하는 사람 플레이어를 잇는 인터페이스입니다. PlayerController 는 본질적으로 사람 플레이어의 의지를 나타냅니다. |
AIController |
AIController 는 말 그대로 Pawn 을 제어하는 의지를 시뮬레이션으로 재현한 것입니다. |
플레이어에게 정보 표시하기
HUD |
HUD 는 "Heads-Up Display" 의 준말이며, 여러 게임에서 볼 수 있는 머리 위에 뜨는 화면 표시기같은 것으로, 생명력, 탄환 수, 총 조준선 등이 표시됩니다. 각 PlayerController 에는 보통 이와 같은 것이 하나씩 있습니다. |
Camera |
PlayerCameraManager 는 플레이어의 "눈"을 나타내며, 그 동작을 관리합니다. 각 PlayerController 에는 보통 하나씩 있습니다. 자세한 것은 카메라 문서를 참고하세요. |
게임의 규칙 설정 및 기록하기
GameMode |
"게임" 이라는 것의 개념은 두 개의 클래스로 나뉩니다. 게임 모드와 게임 스테이트 는 게임의 규칙이나 승리 조건같은 것이 포함된 게임의 정의로, 서버에만 존재합니다. 보통은 플레이 도중 바뀌는 데이터는 많이 없어야 하며, 클라이언트에서 알아야 하는 트랜션트(휘발성) 데이터는 반드시 없어야 할 것입니다. |
GameState |
GameState 에는 접속된 플레이어 목록, 점수, 체크 게임에서 말들의 위치, 오픈 월드 게임에서 완료한 퀘스트 목록 등과 같은 것이 포함될 수 있는 게임 상태가 포함됩니다. GameState 는 서버와 모든 클라이언트에 존재하며, 최신 상태 유지를 위해 자유롭게 리플리케이트 가능합니다. |
PlayerState |
인간 플레이어 또는 플레이어인 척 하는 봇과 같은 게임 참여자의 상태를 말합니다. 게임의 일부로써 존재하는 플레이어가 아닌 AI 에는 PlayerState 가 없습니다. PlayerState 에 적합한 예제 데이터라면, 플레이어 이름, 점수, MOBA 게임류에서의 대전상대 레벨, CTF 게임에서 플레이어가 현재 깃발을 운반중인지 여부 등입니다. 모든 플레이어에 대한 PlayerState 는 (PlayerController 와는 달리) 모든 머신에 존재하며, 동기화 상태 유지를 위해 자유로이 리플리케이트 가능합니다. |
'Unreal > Concept' 카테고리의 다른 글
게임모드, 스테이트, 인스턴스 (0) | 2019.05.14 |
---|---|
프로퍼티 지정자 (0) | 2019.05.12 |
언리얼 게임실행 프로세스 (0) | 2019.05.12 |
각종 포인터 얻어오기 (0) | 2019.05.12 |
UClass (0) | 2019.05.09 |