TIL(Today I Learned)
이번 과제는 자신만의 레벨과 게임의 흐름을 설계하고, UI/UX요소를 다듬어 보는 것이다.
강의에서 만든 게임은 아래와 같이 지뢰를 피해 일정 시간 내에 코인을 모으는 게임이다.

이 게임을 기반으로 어떤 게임을 만들까 생각하던 중 지뢰를 몬스터 스포너로 대체하여 귀신처럼 등장하면 재밌겠다고 생각했다.
1인칭 Horror 템플릿을 활용해서 캐릭터의 시야를 한정하여 공포스러운 분위기를 주었다.
추가한 기능은 다음 같다.
랜덤 스폰너(충돌 시 재생성)
HUD 애니메이션
HP UI
Monster AI (Patrol / Chase / Attack)

이 글에서는 배운 내용 중 게임의 전반적인 흐름을 담당하는 클래스들을 정리해보면 좋을것같다.
액터와 캐릭터에 몇가지 상호작용을 추가하여 게임의 일부를 만들어본적은 있지만,
전반적인 게임의 흐름을 구성해서 완성된 게임으로 만들어본 것은 처음이다.
Character는 Pawn의 자식 클래스이며, 보행형 캐릭터 구현에 최적화된 기본 클래스이다.
내부에 UCharacterMovementComponent를 포함하고 있어, 복잡한 움직임 구현 없이도 걷기, 뛰기, 점프, 회전, 중력 처리 등이 자동으로 동작한다.
Character의 주요 특징
기본 이동 기능 내장
물리 기반 이동 + 네트워크 동기화
사람형 캐릭터에 특화
PlayerController는 플레이어의 입력(키보드, 마우스, 게임패드 등)을 받아 이를 해석하고, 해당 명령을 Character나 Pawn에 전달하는 핵심 클래스다.
입력 처리와 캐릭터의 행동 로직을 분리하여 구조적인 코드 작성이 가능하도록 설계된 언리얼 엔진의 중심 개념이다.
멀티플레이 환경에서는 각 플레이어마다 고유한 PlayerController 인스턴스가 생성되어, 입력을 안전하게 분리한다.
입력 처리 흐름
입력 장치에서 입력 발생
PlayerController의 주요 기능
입력 처리
카메라 제어
UI(HUD)와의 상호작용
Possess / UnPossess
게임의 규칙과 흐름을 총괄 관리하는 클래스이며, 싱글플레이에서는 로컬에서만 동작한다.
플레이어에게 어떤 캐릭터를 스폰할지, 어떤 컨트롤러를 사용할지, 승패 조건이나 점수 계산은 어떻게 할지를 결정한다.
레벨마다 다른 GameMode를 설정하여 상황별 게임 진행 방식을 제어할 수 있다.
GameMode의 주요 기능
Pawn/Character 스폰
PlayerController 지정
게임 규칙 및 흐름 관리
GameState / PlayerState와의 연동
GameState는 현재 게임의 전역 상태 정보(게임 진행 상황, 타이머, 점수 등)를 저장하고, 클라이언트와 동기화해주는 클래스이다.
GameMode가 서버 전용으로 로직을 관리하는 반면, GameState는 서버와 클라이언트 모두에서 존재하며, 클라이언트가 게임 상태를 알 수 있게 도와줍니다.
주로 UI, HUD, 애니메이션, 판정 처리 등에서 현재 게임 상태를 참조할 때 사용한다.
GameState의 주요 기능
게임 진행 정보 관리
서버 → 클라이언트 동기화
PlayerState 집합 보관
GameInstance는 게임 실행 시 생성되어, 레벨 전환 간에도 유지되는 유일한 클래스다.
주로 게임 전역에서 공유해야 하는 데이터(예: 로그인 정보, 설정, 선택한 캐릭터 등)를 저장하며, 세션을 넘나드는 지속성 있는 상태 관리에 사용된다.
GameInstance의 주요 기능
전역 데이터 저장
레벨 전환에도 파괴되지 않음
게임 구조 초기화 및 관리