주요 클래스별 역할과 기능
✅ GameMode (게임 모드)
- 핵심 기능:
- 게임 규칙과 흐름의 총괄 관리자
- 게임 시작 시 단 한 번 생성되어 레벨 내 규칙, 승패 조건, 점수 계산, 플레이어 스폰 등을 관리
- 예시:
- FPS 게임에서 점수 계산 및 라운드 관리 담당
- 새 플레이어 접속 시, Pawn(캐릭터)과 PlayerController를 생성하고 연결
- 게임 시작/종료 이벤트 제어 및 일정 시간 후 승리팀 결정 등
- 관리 항목:
- DefaultPawnClass, PlayerControllerClass, HUDClass 등 기본 클래스 지정
- 플레이어 스폰 지점 및 경기 진행 상태(상태 머신) 관리
- 중요: 서버 전용 객체이며, 클라이언트에 필요한 정보는 GameState로 전달
✅ GameState (게임 상태)
- 핵심 기능:
- GameMode의 게임 진행 정보를 전체 플레이어와 공유
- 서버와 클라이언트에 모두 존재하며, 게임의 현재 상태를 담음
- 예시:
- 남은 시간, 전체 점수, 라운드 상태 등 관리
- 시간제한 경기에서 남은 시간을 저장하여 모든 클라이언트에 동일하게 표시
- 스코어보드, 플레이어 개별 정보(점수, 킬/데스) 관리 및 승패 판단에 활용
- 관리 항목:
- 모든 플레이어의 PlayerState 목록 관리
- 전역 변수(예: 현재 게임 단계, 점수 등)를 클라이언트와 자동 동기화
➡️ GameMode가 “서버 전용 두뇌”라면, GameState는 그 결과를 “모두와 공유하는 게시판”이라고 볼 수 있음
✅ PlayerController (플레이어 컨트롤러)
- 핵심 기능:
- 플레이어의 입력을 게임 세계에 전달하는 중계자 역할
- 키보드/마우스/패드 입력을 받아 Pawn에 명령을 전달 및 네트워크 통신 역할 수행
- 예시:
- 1인칭/3인칭 게임에서 카메라 제어나 입력 반응 처리
- 점프, 공격 등의 명령을 서버에 전달하여 Pawn에게 실행 요청
- Pawn이 파괴되어도 남아있어, 새로운 Pawn을 생성해 연결(리스폰 기능 구현)
- 관리 항목:
- 현재 조종 중인 Pawn 관리
- 카메라(PlayerCameraManager)와 입력 컴포넌트, HUD(UI) 생성
- 네트워크: 서버는 모든 PlayerController를 가지고, 클라이언트는 자기 자신의 컨트롤러만 복제받음
✅ Pawn (플레이어 캐릭터)
- 핵심 기능:
- 게임 세계에서 움직이고 상호작용하는 실제 객체
- 플레이어 캐릭터, 탈것, 드론 등 모두 Pawn의 하위 클래스에 해당
- 예시:
- FPS/TPS 게임의 주인공 캐릭터, 레이싱 게임의 차량, RTS의 유닛 등
- 이동, 점프, 공격 등 플레이어 입력에 따른 동작 실행
- AIController가 소유하면 NPC로 동작
- 관리 항목:
- 상태(체력, 스태미나) 및 동작 로직 관리
- 네트워크 복제 설정 시, 서버의 위치/상태 변화가 모든 클라이언트에 반영됨
- 보통 PlayerState를 참조하여 플레이어 정보(점수, 이름 등) 활용
✅ UserWidget (유저 위젯, UI 요소)
- 핵심 기능:
- UMG 시스템을 통한 UI 제작 (체력바, 맵, 인벤토리 등)
- 게임 화면에 표시되는 요소를 담당하며, Actor가 아니므로 월드와 별도로 작동
- 예시:
- 게임 시작 시 HUD(Head-Up Display) 생성 및 뷰포트에 추가
- 체력바는 Pawn 체력 정보를 읽어와 표시, 미니맵은 위치 정보를 활용하여 그림
- 메뉴, 인벤토리, 퀘스트 로그 등 다양한 UI 구현
- 관리 항목:
- 하위 위젯(텍스트, 이미지, 프로그래스바 등) 배치 및 업데이트
- 데이터는 Pawn, PlayerState, GameState 등에서 읽어와 반영
- 중요: 클라이언트 전용 객체로 서버와 직접 동기화되지 않음
클래스 간 상호작용
✨ PlayerController를 이해하는 것이 핵심이다!
- GameMode ↔ GameState:
- GameMode(서버 전용)가 게임 진행 정보를 관리하면, 이를 GameState에 반영해 클라이언트와 공유
- 예: 점수 변경 시 GameState가 업데이트되어 모든 플레이어가 동일한 정보를 확인
- GameMode → PlayerController/Pawn:
- 새로운 플레이어 접속 시 GameMode가 PlayerController와 Pawn을 생성 및 연결
- 게임 시작 및 리스폰 시, 기본 Pawn 생성 및 소유(Possess) 처리
- PlayerController ↔ Pawn:
- PlayerController가 입력을 받아 Pawn의 이동 및 동작을 제어
- Pawn 상태 변화는 PlayerController와 UI에 전달되어 업데이트됨
- ➡️ 플레이어의 “대리인”이 Pawn을 움직여, 실제 행동을 실행하는 구조
- PlayerController ↔ UserWidget (UI):
- PlayerController는 게임 시작 시 HUD/UI 위젯 생성
- 입력 처리와 UI 상호작용(예: 버튼 클릭)도 담당하며, 서버와 클라이언트 간 RPC로 명령 전달
- GameState ↔ PlayerState ↔ UI:
- GameState가 전체 게임 상태(남은 시간 등)를, PlayerState가 각 플레이어 정보를 관리
- UI는 이 데이터를 읽어 스코어보드, 팀 정보 등을 실시간으로 표시
🕹️ 싱글플레이 vs 멀티플레이
🔹 싱글플레이 (로컬)
- 특징: 모든 객체가 한 로컬 머신에서 실행되므로 구조가 단순
- 주요 객체:
- GameMode & GameState: 로컬에서 생성되어 게임 규칙 및 상태 관리
- PlayerController & Pawn: 플레이어의 입력에 따라 즉시 반응 (네트워크 지연 없음)
- UserWidget: 로컬 UI 생성 및 업데이트
🔹 멀티플레이 (리슨 서버)
- 구조: 한 명의 호스트(서버)와 여러 클라이언트로 역할 분리
- 서버(호스트) 측:
- GameMode: 서버에서만 존재하며 게임 규칙 관리
- GameState: 서버에서 업데이트 후 모든 클라이언트에 동기화
- PlayerController, PlayerState, Pawn: 각 플레이어 별로 생성되어 서버에서 관리
- 클라이언트 측:
- GameState: 서버에서 복제된 읽기 전용 복제본 사용
- 자신의 PlayerController: 입력 처리 및 UI 생성 전담
- Pawn 복제본: 서버의 상태를 반영해 모든 클라이언트에 표시
- UserWidget: 각 클라이언트 로컬에서 UI 구성 및 업데이트
- 데이터 흐름:
- 서버는 권위(Authority)를 갖고 모든 게임 로직을 처리
- 클라이언트는 입력을 서버에 전달RPC) 받고, 복제된 데이터를 화면에 표시
⚙️ 언리얼 엔진에서의 데디케이티드 서버 사용
빌드: 언리얼 엔진 프로젝트에서는 데디케이티드 서버를 별도로 빌드해야 한다.
- (소스 코드를 받아 빌드하는 경우가 많다.)
2025.03.13 - [Dev./게임 네트워크] - [TIL_250313_1] 언리얼 소스 코드 빌드하기
[TIL_250313_1] 언리얼 소스 코드 빌드하기
💭회고컴퓨터 용량 부족 문제로 인해 해당 실습은 진행하지 못하고 있는 상태이나... 일단 방법은 정리해두는 편이 좋겠다 생각해서 정리 글을 작성해본다. 소스코드 클론하는 것만으로도 거의
raindrovvv.tistory.com
- 배포: 서버 전용 실행 파일을 생성해, 실제 운영 환경에 배포한다.
- 네트워크 동기화: 서버에서 모든 게임 상태를 관리하고 클라이언트와 동기화하여, 플레이어들이 동일한 게임 정보를 받아볼 수 있도록 한다.
🔗참고 링크
GameMode, GameState, PlayerController, UserWidget, Pawn
핵심 기능: 게임의 규칙과 흐름을 총괄하는 관리자 클래스입니다. 게임이 시작되면 한 번만 생성되며, 해당 레벨에서 게임 규칙, 승패 조건, 점수 계산, 플레이어 스폰 등의 로직을 담당합니다
velog.io
'Dev. > UE 언리얼 엔진' 카테고리의 다른 글
게임 코드 리팩터링: 5가지 핵심 결정 원칙 (0) | 2025.04.03 |
---|---|
[UE/Tip] 유용한 팁 : ⚙️언리얼 엔진 플러그인 만들기 + (0) | 2025.03.27 |
[TIL_250325] UE5로 숫자 야구 게임 만들기🔄️ (0) | 2025.03.25 |
[TIL_250306] 언리얼 엔진 시네마틱(엔딩 씬) (0) | 2025.03.06 |
[TIL_250305] 언리얼 엔진 자막 달기 (0) | 2025.03.05 |