언리얼 프레임 워크
UObject를 상속한 클래스 생성자는 인스턴스를 초기화해 CDO를 제작하기 위한 목적으로 사용된다.
게임 플레이에서 생성자 코드는 사용할 일이 없으며
생성자는 World가 생성되기 이전이기 때문에 World는 얻을 수 없다.
// 게임 플레이 시의 초기화 함수는 Init이나 BeginPlay함수를 사용한다.
첫 번째로 생성되는 게임 인스턴스(Game Instance)
∝ 게임 인스턴스(Game Instance)
게임 인스턴스는 UObject를 상속한다.
에디터 상에서 Play 버튼을 누를 시 게임 인스턴스가 가장 먼저 생성되고 게임이 종료될 때까지 유지되며
종료될 때 가장 마지막에 소멸이 이루어지기 때문에 게임에서 사용되는 데이터를 관리하기 좋다.
레벨이 전환되더라도 변하지 않기때문에 공유할 데이터를 저장할 수 있는 전역 개체이며
클래스 어디서든 간단하게 얻을 수 있기때문에 데이터를 관리하기에 좋다.
GameInstance 오브젝트는 초기화될 때 Init() 함수를 호출하는데 이를 오버라이드 하여 초기화를 해줄 수 있다.
하지만 Init()함수에서는 아직 월드와 엑터 등이 생성되기 이전이기 때문에 이에 대한 값은 얻을 수 없다.
함수의 콜스택이 많아질 경우 게임 인스턴스에 델리게이트를 만들어 바인딩, 호출하여 콜 스택을 줄여줄 수도 있고
참조를 저장해놓고 얻어오는 방법으로도 사용할 수도 있다.
두번째로 생성되는 Game Mode / Game State / Player State
∝ 게임 모드(Game Mode)
게임 모드에는 게임 규칙을 구현하기 위한 함수가 들어있다.
레벨이 로드되면서부터 게임 종료 시까지 한 개만 존재하며
게임 모드는 오직 서버측에만 존재하며 클라이언트에서는 항상 nullptr이다.
서버측에서만 존재하므로 게임 룰 위주의 서버 로직을 작성하게 된다.
게임 모드는 Default Pawn, Player Controller, HUD, GameState, PlayerState 등을 지정해줄 수 있으며 이것을 통해
같은 레벨에서도 다른 게임 모드를 적용해 플레이하는 것이 가능하므로 여러 유형의 게임 룰을 적용할 수 있다.
게임 모드는 게임 인스턴스와는 다르게 레벨이 바뀔때마다 변할 수 있기 때문에
한 레벨 안에서 공용변수 저장에는 게임모드를 사용할 수 있지만 레벨을 이동할 경우
레벨 이동시에도 값이 유지되는 게임 인스턴스를 사용해주어야 한다.
∝ 게임 스테이트(Game State)
게임 스테이트는 게임 모드에 의해 인스턴스가 생성되고 한 개만 존재한다.
클라이언트에게 서버 측 정보를 전달할 때 사용하며 전체 플레이어수, 전체 PlayerState정보에 접근이 가능하고
개념적으로는 접속된 모든 클라이언트가 게임 플레이 도중 변하면서 모두에게 관련이 있고 알아야 하는 정보,
플레이어 개개인이 아닌 게임 모드에 관련된 정보를 관리하는 역할을 맡아야 한다.
예를 들어 접속된 플레이어의 목록이나 점수, 오픈 월드 게임에서 완료한 미션 등과 같은
게임 전반적인 데이터 기록을 유지할 수 있다.
"특정 플레이어가 팀의 점수를 몇 점이나 올렸나" 하는 정보는 개별 플레이어 단위 기록이기에
게임 스테이트에서 관리하기보다는 플레이어 스테이트(PlayerState)에서 관리하는 게 더 깔끔하다.
∝ 플레이어 스테이트(Player State)
플레이어 스테이트는 플레이어에 하나만 할당되며 레벨이나 플레이어가 메모리에서 제거되더라도
PlayerState는 계속 존재하며 플레이어 정보를 유지할 수 있게 된다.
모든 플레이어가 아닌 특정 플레이어에게 관련이 있고 알아야 하는 정보를 저장하는 데 사용된다.
현재 플레이어 스테이트의 주인이 아니면 데이터 갱신이 불가능하며
모든 클라이언트가 다른 플레이어 스테이트에 접근할 때 사용한다.
본문출처 : https://hombody.tistory.com/407?category=861819
[Unreal] - 언리얼 프레임 워크
언리얼 프레임 워크 UObject를 상속한 클래스 생성자는 인스턴스를 초기화해 CDO를 제작하기 위한 목적으로 사용된다. 게임 플레이에서 생성자 코드는 사용할 일이 없으며 생성자는 World가 생성되
hombody.tistory.com
'Unreal Engine 4 > 블루프린트' 카테고리의 다른 글
<Unreal BP> 애니메이션 포즈(Pose)의 공간 변환에 대하여 (로컬, 컴포넌트 변환) (0) | 2022.04.19 |
---|---|
<Unreal BP> 에임 오프셋(AO) (0) | 2022.04.19 |
<Unreal BP> 기본적인 충돌(Collision) 설정 (0) | 2022.04.19 |
<Unreal BP> 컨트롤러 회전에 맞춰 SpringArm 회전하기 (0) | 2022.04.18 |
<Unreal BP> 카메라 천천히 따라오게 하기(SpringArm의 Lag 활용) (0) | 2022.04.18 |