[Unreal Engine 5] NetRole (Authority와 Proxy)

2026. 3. 17. 20:35·프로그래밍/Unreal Engine 5

📝 개요

언리얼 엔진으로 멀티플레이 게임을 개발할 때 가장 먼저 겪는 혼란은 "내가 작성한 코드가 도대체 어느 컴퓨터(서버 vs 클라이언트)에서 실행되고 있는가?"이다. 게임에 중대한 영향을 끼치는 로직(데미지 판정, 아이템 스폰 등)은 반드시 서버에서 처리되어야 하며, 이를 구분하기 위해 언리얼 엔진이 제공하는 핵심 개념인 NetRole(네트워크 역할)에 대해 학습하고 정리한다.


1. Authority(권한)와 Proxy(허상)

멀티플레이 환경에서 월드에 존재하는 액터들은 각자의 '권한' 수준을 가진다.

  • Authority (권한): 서버에 스폰된 액터가 가지는 상태로, 게임에 중대한 영향을 끼칠 수 있는 '진짜 권한'을 뜻한다.
  • Proxy (허상): 서버의 Authority 액터가 클라이언트 PC로 복제되었을 때, 이 클라이언트 화면에 보이는 복제본을 뜻한다. Proxy 상태의 액터에서는 게임의 중요한 로직을 직접 연산해서는 안 된다.


2. Local Role과 Remote Role (왜 두 개로 쪼갰을까?)

로직을 정확히 통제하려면 현재 내 코드가 돌고 있는 컴퓨터에서의 역할인 로컬 롤(Local Role)과, 네트워크로 연결된 반대편 컴퓨터에서의 역할인 리모트 롤(Remote Role)을 모두 알아야 한다.

🤔 만약 Local Role만 있다면 어떤 문제가 생길까?
서버 월드에는 서버 전용 NPC(몬스터)와 특정 플레이어가 조종하는 캐릭터가 섞여 있다. 이 둘은 서버 PC에 존재하므로 Local Role이 둘 다 Authority이다. 즉, Local Role만으로는 이 캐릭터가 단순 AI인지, 실제 유저가 접속해서 조종하는 캐릭터인지 구분할 수가 없다.

💡 Remote Role의 도입:

  • 유저가 접속한 캐릭터: Local Authority / Remote Autonomous Proxy
  • 서버 전용 NPC: Local Authority / Remote None

이렇게 두 가지를 조합하면 액터의 정체를 완벽하게 분류할 수 있고, 누구에게 RPC(Remote Procedure Call)를 쏴야 할지 명확하게 통제할 수 있다.


3. 언리얼 엔진의 4가지 NetRole (ENetRole)


4. 실무에서 사용하는 핵심 검증 함수

이러한 NetRole을 C++ 코드 단에서 쉽게 검증하기 위해 언리얼 엔진은 직관적인 함수들을 제공한다.

① HasAuthority()

현재 이 코드를 실행하는 주체가 서버(권한 보유자)인지 확인한다.

// AActor.cpp 내부 구현
FORCEINLINE_DEBUGGABLE bool AActor::HasAuthority() const
{
    return (GetLocalRole() == ROLE_Authority);
}
  • 사용처: 체력 감소, 아이템 스폰, 게임 오버 처리 등.

② IsLocalController() / IsLocallyControlled()

현재 이 폰/컨트롤러를 조종하는 주체가 '나 자신(로컬 클라이언트)'인지 확인한다.

void ACXPlayerController::BeginPlay()
{
    Super::BeginPlay();

    // 내가 조종하는 컨트롤러가 아니라면(다른 유저의 것이라면) 여기서 실행을 멈춤!
    if (IsLocalController() == false)
    {
        return;
    }

    // 이후 UI 위젯 생성 등 로컬 유저에게만 필요한 로직 실행
}
  • 사용처: 크로스헤어 UI 생성, 키보드/마우스 입력 처리. 카메라 조작 등.

'프로그래밍 > Unreal Engine 5' 카테고리의 다른 글

[Unreal Engine 5] Property Replication  (0) 2026.03.20
[Unreal Engine 5] Remote Procedure Call 기초  (0) 2026.03.18
[Unreal Engine 5] 언리얼 엔진 멀티플레이: 서버의 종류와 데디케이티드 서버 실행 흐름  (0) 2026.03.13
[Unreal Engine 5] CDO(Class Default Object)  (0) 2026.03.12
[Unreal Engine 5] 언리얼 엔진 스마트 포인터와 메모리 관리 총정리 (TObjectPtr, TSoftObjectPtr, TSubclassOf 등)  (0) 2026.03.11
'프로그래밍/Unreal Engine 5' 카테고리의 다른 글
  • [Unreal Engine 5] Property Replication
  • [Unreal Engine 5] Remote Procedure Call 기초
  • [Unreal Engine 5] 언리얼 엔진 멀티플레이: 서버의 종류와 데디케이티드 서버 실행 흐름
  • [Unreal Engine 5] CDO(Class Default Object)
hanong8
hanong8
hanong8 님의 블로그 입니다.
  • hanong8
    HaNong
    hanong8
  • 전체
    오늘
    어제
    • 분류 전체보기 (102) N
      • 프로그래밍 (99) N
        • Unreal Engine 5 (45)
        • C++ (22)
        • UML (2)
        • 자료구조 (2)
        • 알고리즘 (9)
        • 개발일지 (4)
        • DirectX11 (5)
        • Git (2)
        • 코드카타 (8) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
hanong8
[Unreal Engine 5] NetRole (Authority와 Proxy)
상단으로

티스토리툴바