Unreal Engine 멀티플레이LESSON 22
입력, 카메라, UI는 어디서 처리할까
난이도입문 → 초급
예상 시간75분
선수지식21강의 소유 Character 이동
22강. 입력, 카메라, UI는 어디서 처리할까
1. 이번 강의에서 해결할 문제
서버가 모든 플레이어 Widget을 만들거나 Simulated Proxy가 카메라를 활성화해 화면이 전환됩니다. UI 버튼이 GameMode 함수를 직접 호출하면 원격 클라이언트에서는 null입니다. 입력과 표현은 로컬, 결과 판정은 서버, 표시 데이터는 복제 상태라는 경계를 구현해야 합니다.
2. 학습 목표
3. 핵심 개념
입력 장치, 화면과 Widget은 각 클라이언트의 로컬 자원입니다. 서버에는 데디케이티드 환경에서 화면이 없으며 다른 클라이언트의 Widget을 조작할 수 없습니다. 로컬 UI는 복제 상태를 구독하고 버튼 입력은 PlayerController/Pawn의 Server RPC를 호출합니다.
| 기능 | 실행 위치 | 데이터 원본 |
|---|---|---|
| 이동·발사 입력 읽기 | 소유 클라이언트 | 로컬 장치 |
| 카메라 회전·화면 흔들림 | 소유 클라이언트 | 로컬 표현 |
| 팀 점수 HUD | 각 클라이언트 | GameState 복제 값 |
| 자기 체력 HUD | 소유 클라이언트 | Pawn Health RepNotify |
| 준비 버튼 판정 | 서버 | PlayerController RPC → PlayerState |
4. 단계별 실습
CaptureArenaPlayerController.cpp
void ACaptureArenaPlayerController::BeginPlay()
{
Super::BeginPlay();
if (!IsLocalController()) return;
ULocalPlayer* LocalPlayer = GetLocalPlayer();
UEnhancedInputLocalPlayerSubsystem* InputSubsystem =
LocalPlayer
? LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>()
: nullptr;
if (InputSubsystem && DefaultMappingContext)
{
InputSubsystem->AddMappingContext(DefaultMappingContext, 0);
}
EnsureHudCreated();
BindReplicatedViewModels();
}
void ACaptureArenaPlayerController::SetReadyFromUi(bool bReady)
{
if (!IsLocalController()) return;
Server_SetReady(bReady, ++LocalReadyRequestId);
}
CaptureArenaCharacter.cpp
void ACaptureArenaCharacter::OnRep_PlayerState()
{
Super::OnRep_PlayerState();
if (IsLocallyControlled())
{
NotifyLocalControllerPlayerStateReady();
}
}
HUD는 Tick마다 GameState를 Polling하지 않고 RepNotify/Delegate에서 ViewModel 값을 갱신합니다. 초기 바인딩 시 현재 값을 한 번 읽어 이벤트 구독 전 복제된 상태도 표시합니다. Unbind 없이 Pawn을 교체하지 않습니다.
5. 코드가 동작하는 이유
Local Player Subsystem은 클라이언트의 실제 입력 장치와 연결되므로 로컬 Controller에서만 접근합니다. 서버가 확정한 상태는 GameState·PlayerState·Pawn RepNotify로 도착하고 UI는 그 결과를 표현합니다. UI가 직접 점수를 쓰지 않아 화면 코드가 권한 경계를 넘지 않습니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2입력, 카메라, UI는 어디서 처리할까 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
22강. 입력, 카메라, UI는 어디서 처리할까 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.