Unreal Engine 멀티플레이LESSON 19
RPC와 변수 복제는 언제 구분할까
난이도입문 → 초급
예상 시간70분
선수지식18강의 RPC 신뢰도 정책
19강. RPC와 변수 복제는 언제 구분할까
1. 이번 강의에서 해결할 문제
RPC와 복제는 모두 네트워크로 정보를 보내지만 보장하는 의미가 다릅니다. 상태를 RPC로만 보내면 늦은 참가와 유실에서 복구하지 못하고, 모든 순간 효과를 Property로 만들면 임시 카운터와 OnRep가 늘어납니다. 먼저 데이터가 “현재 사실”인지 “요청/사건”인지 분류해야 합니다.
2. 학습 목표
3. 핵심 개념
결정 질문:
- 지금 접속한 사용자가 과거 호출 없이도 현재 값을 알아야 하는가? → Property.
- 한 머신이 다른 머신에 행동을 요청하는가? → Ownership을 갖춘 RPC.
- 손실돼도 규칙이 유지되는 짧은 표현인가? → Unreliable RPC/Multicast.
- 특정 사용자만 알아야 하는 현재 상태인가? → OwnerOnly Property.
- 모든 사용자가 알아야 하는 현재 경기 상태인가? → GameState/PlayerState Property.
4. 단계별 실습
CaptureHealthComponent.h
UPROPERTY(ReplicatedUsing = OnRep_Health)
float Health = 100.0f;
UFUNCTION() void OnRep_Health(float PreviousHealth);
void ApplyDamageOnServer(float Amount);
void RefreshHealthPresentation(float PreviousHealth);
CaptureHealthComponent.cpp
void UCaptureHealthComponent::ApplyDamageOnServer(float Amount)
{
if (!GetOwner() || !GetOwner()->HasAuthority() || Amount <= 0.0f) return;
const float Previous = Health;
Health = FMath::Clamp(Health - Amount, 0.0f, MaxHealth);
RefreshHealthPresentation(Previous);
}
void UCaptureHealthComponent::OnRep_Health(float PreviousHealth)
{
RefreshHealthPresentation(PreviousHealth);
}
void UCaptureHealthComponent::RefreshHealthPresentation(float PreviousHealth)
{
OnHealthChanged.Broadcast(Health, MaxHealth);
if (PreviousHealth > 0.0f && Health <= 0.0f)
{
OnDeathPresentation.Broadcast();
}
}
발사 입력은 Server_RequestFire, 서버 Trace 뒤 체력 변경은 Health Property, 총구·충격 효과는 Multicast_PlayFireEffects, 개인 거절 안내는 Client_RequestRejected로 연결합니다. 같은 “발사 기능” 안에서도 데이터 의미에 따라 수단이 네 가지로 나뉩니다.
5. 코드가 동작하는 이유
Health는 서버의 최신 값이 복제되어 유실·늦은 참가 뒤에도 수렴합니다. 서버와 클라이언트가 같은 RefreshHealthPresentation을 호출해 UI와 사망 표현 코드를 중복하지 않습니다. 실제 사망·점수 규칙은 서버 ApplyDamageOnServer 이후 한 번만 실행하고 OnRep는 표현만 담당합니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2RPC와 변수 복제는 언제 구분할까 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
19강. RPC와 변수 복제는 언제 구분할까 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.