본문으로 건너뛰기
Unreal Engine 멀티플레이LESSON 16

Client RPC로 특정 클라이언트에 알리기

난이도입문 → 초급
예상 시간70분
선수지식15강의 서버 요청 검증

16강. Client RPC로 특정 클라이언트에 알리기

1. 이번 강의에서 해결할 문제​

상호작용 실패 이유나 개인 매치 초대처럼 한 플레이어만 알아야 할 정보를 GameState에 복제하면 모두가 받고 상태가 불필요하게 남습니다. 반대로 서버가 Widget을 직접 열 수는 없습니다. 서버는 Owning Connection을 가진 Actor에서 Client RPC를 호출해야 합니다.

2. 학습 목표​

3. 핵심 개념​

Client RPC는 서버의 특정 Actor에서 호출하고 그 Actor의 Owning Connection에 전달합니다. PlayerController는 연결과 직접 대응하므로 개인 알림에 자연스럽습니다. GameState처럼 특정 Client Owner가 없는 Actor에서 호출하면 예상한 한 명을 찾지 못합니다.

Client RPC는 과거 메시지를 늦은 참가자에게 재생하지 않습니다. “현재 준비 상태”처럼 지속되어야 할 값은 PlayerState 또는 OwnerOnly Property로 두고, “상호작용 거절: 너무 멂”처럼 순간 안내만 Client RPC로 보냅니다.

4. 단계별 실습​

CaptureArenaPlayerController.h
UENUM(BlueprintType)
enum class ERequestRejectReason : uint8
{
TooFar,
InvalidState,
Cooldown,
NotAvailable
};

UFUNCTION(Client, Reliable)
void Client_RequestRejected(ERequestRejectReason Reason);

UFUNCTION(BlueprintImplementableEvent, Category = "UI")
void ShowRequestRejected(ERequestRejectReason Reason);
CaptureArenaPlayerController.cpp
void ACaptureArenaPlayerController::Client_RequestRejected_Implementation(
ERequestRejectReason Reason)
{
if (!IsLocalController()) return;

UE_LOG(LogTemp, Display, TEXT("Request rejected Reason=%d"),
static_cast<int32>(Reason));
ShowRequestRejected(Reason);
}
서버 검증 코드
ACaptureArenaPlayerController* CapturePC =
Cast<ACaptureArenaPlayerController>(Controller);

if (DistanceSq > FMath::Square(MaxInteractDistance))
{
if (CapturePC)
{
CapturePC->Client_RequestRejected(ERequestRejectReason::TooFar);
}
return;
}

Client RPC 인자는 사용자에게 보여 줄 제한된 이유 코드만 보냅니다. 서버 내부 보안 규칙, 비밀 식별자나 다른 플레이어의 개인 데이터를 그대로 전달하지 않습니다.

5. 코드가 동작하는 이유​

서버에는 모든 PlayerController가 있고 각 Controller는 하나의 Owning Connection에 연결됩니다. 서버가 그 Controller에서 Client RPC를 호출하면 해당 클라이언트의 Controller 복사본에서 실행되어 로컬 UI 이벤트를 발생시킵니다. 다른 클라이언트에는 그 Controller 자체가 없으므로 메시지를 받지 않습니다.

6. 자주 하는 실수와 해결법​

7. 직접 실습​

8. 이해 점검 질문 3개​

9. 핵심 요약​

MINI QUIZ

Client RPC로 특정 클라이언트에 알리기 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“Client RPC로 특정 클라이언트에 알리기”에서 다음 단계로 넘어가기 전에 확인할 핵심은 무엇인가요?
  2. 문제 2“Client RPC로 특정 클라이언트에 알리기” 실습 중 ‘GameState에서 개인 Client RPC 호출’ 상황을 발견했습니다. 본문과 일치하는 설명은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

16강. Client RPC로 특정 클라이언트에 알리기 미완료 상태