Actor
- 레벨에 배치할 수 있는 오브젝트를 말합니다. 액터는 이동, 회전, 스케일과 같은 3D 트랜스폼을 지원하는 범용 클래스입니다.
- 트랜스폼 (위치, 회전, 스케일) 데이터를 직접 저장하지 않으며, 액터의 루트 컴포넌트에 트랜스폼 데이터가 존재하는 경우, 그 데이터를 사용합니다.
- Component (컴포넌트) 라 불리는 특수 유형 Object (오브젝트)를 담는 그릇으로 생각해 볼 수 있습니다.
- 플레이 도중 네트워크를 통한 프로퍼티 및 함수 호출의 리플리케이션 사용 가능.
Component
- 컴포넌트는 생성시 자신을 포함하고 있는 액터에 할당됩니다.
Object
- 모든 UE 객체의 기본 클래스입니다.
Actor 라는 용어는 계층에서 AActor 에서 파생된 클래스의 인스턴스를 나타내는 데 일반적으로 사용되는반면 Object라는 용어는 AActor 클래스에서 상속되지 않는 클래스의 인스턴스를 나타내는 데 사용됩니다.
예로 자동차 전체는 액터인 반면, 바퀴와 문과 같은 자동차 부품은 모두 해당 액터의 컴포넌트가 됩니다.
Pawn
- Controller 에 의해 possess(빙의) 가능하며, 입력을 쉽게 받을 수 있도록 구성 가능하고, 여러가지 다양한 플레이어같은 동작을 할 수 있습니다. 참고로 Pawn 은 인간형이라 가정되지 않습니다.
Character
- 인간형 Pawn 입니다. 기본적으로 콜리전에 쓸 CapsuleComponent 와 CharacterMovementComponent 가 들어있습니다. 기본적인 인간형 동작을 할 수 있으며, 네트워크를 통해 부드러운 이동 리플리케이션이 가능하고, 애니메이션 관련 함수성도 약간 있습니다.
Controller
- Pawn 에 대한 지시를 담당하는 Actor 입니다. 보통 두 가지 형태로 등장하는데, AIController 와 PlayerController 입니다. 컨트롤러는 Pawn 에 "possess"(빙의)되어 그 폰을 제어할 수 있습니다.
관계도
Object -> Actor -> Pawn -> Character
- 제일 안쪽이 Object이다.
- GameMode는 게임의 규칙이나 승리 조건같은 것이 포함된 게임의 정의로, 서버에만 존재합니다. 보통은 플레이 도중 바뀌는 데이터는 많이 없어야 하며, 클라이언트에서 알아야 하는 트랜션트(휘발성) 데이터는 반드시 없어야 할 것입니다.
GameMode 흐름
- WaitingToStart (시작 대기중)가 그 다음 상태로, 여기에 들어갈 때 HandleMatchIsWaitingToStart (경기 시작 대기중 처리)가 호출됩니다. 액터 틱은 이루어지지만, 플레이어는 아직 스폰되어있지 않습니다. ReadyToStartMatch (경기 시작 준비)가 true 를 반환하는 경우, 또는 StartMatch 가 호출된 경우 다음 상태로 전환됩니다.
- InProgress (진행중)은 게임의 주요 부분이 일어나는 상태입니다. 여기에 들어갈 때 HandleMatchHasStarted (경기 시작 처리)가 호출되며, 그 후 모든 액터에서 BeginPlay (플레이 시작)을 호출합니다. 이 시점에서 일반적인 게임플레이가 진행됩니다. ReadyToEndMatch (경기 종료 준비)가 true 를 반환하거나 EndMatch (경기 종료)가 호출되는 경우 경기가 다음 상태로 전환됩니다.
- WaitingPostMatch (경기 후 대기)는 끝에서 두 번째 상태로, 여기에 들어설 때 HandleMatchHasEnded (경기 종료 처리)가 호출됩니다. 액터 틱은 여전히 일어나지만 새로운 플레이어는 참가할 수 없습니다. 맵 이동이 시작되면 다음 상태로 전환됩니다.
- LeavingMap (맵 떠나기)는 일반적인 흐름의 마지막 상태로, 여기에 들어설 때 HandleLeavingMap (맵 떠나기 처리)를 호출합니다. 경기가 이 상태에 머물러있다가 맵 전환이 일어나면 EnteringMap (맵 진입) 상태로 돌아갑니다.
- Aborted (중단된)은 실패 상태로, AbortMatch (경기 중단)을 호출하면 시작됩니다. 복구할 수 없는 오류가 발생했을 때 설정됩니다.
GameState
- GameState 에는 접속된 플레이어 목록, 점수, 체크 게임에서 말들의 위치, 오픈 월드 게임에서 완료한 퀘스트 목록 등과 같은 것이 포함될 수 있는 게임 상태가 포함됩니다. GameState 는 서버와 모든 클라이언트에 존재하며, 최신 상태 유지를 위해 자유롭게 리플리케이트 가능합니다.
PlayerState
- 인간 플레이어 또는 플레이어인 척 하는 봇과 같은 게임 참여자의 상태를 말합니다. 게임의 일부로써 존재하는 플레이어가 아닌 AI 에는 PlayerState 가 없습니다. PlayerState 에 적합한 예제 데이터라면, 플레이어 이름, 점수, MOBA 게임류에서의 대전상대 레벨, CTF 게임에서 플레이어가 현재 깃발을 운반중인지 여부 등입니다. 모든 플레이어에 대한 PlayerState 는 (PlayerController 와는 달리) 모든 머신에 존재하며, 동기화 상태 유지를 위해 자유로이 리플리케이트 가능합니다.
프레임워크 클래스 관계
- 게임은 GameMode 와 GameState 로 이루어집니다. 게임에 참여하는 사람 플레이어는 PlayerController 에 연관됩니다. 이러한 PlayerController 는 플레이어가 레벨 내 물리적 존재를 가질 수 있도록 Pawn 에 빙의됩니다. PlayerController 는 플레이어에게 입력 컨트롤, 헤드업 디스플레이 (HUD), 카메라 시야 처리를 위한 PlayerCameraManager 등을 줄 수 있습니다.
본문 링크
https://docs.unrealengine.com/4.26/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/
'Game Programming > Unreal' 카테고리의 다른 글
[Unreal] 리플리케이트 (0) | 2022.06.07 |
---|---|
[Unreal] 유용한 언리얼 함수 (0) | 2022.06.07 |
Unreal - Zombie FPS Game Portfolio (0) | 2022.05.06 |
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 9 (0) | 2022.03.17 |
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 8 (0) | 2022.03.16 |