본캠프 68일차_언리얼엔진 게임개발 입문_NetRole 이해

YU YEON WON·2025년 11월 17일

오늘은 언리얼 엔진에서 네트워크 프로그래밍을 할 때 꼭 알아야 할 NetRole에 대해 학습했다. NetRole은 액터가 네트워크 상에서 어떤 역할을 수행하는지를 나타내는 속성으로, 서버와 클라이언트 간의 권한 분리를 명확히 해준다.

🧩 NetRole의 종류

NetRole내 용
ROLE_None네트워크에 존재하지 않음, 클라이언트에서만 생성된 액터 등
ROLE_SimulatedProxy서버에서 복제된 액터로 클라이언트에서 읽기 전용, 동기화만 받음
ROLE_AutonomousProxy클라이언트가 제어하는 액터, 서버에 입력을 전송할 수 있음
ROLE_Authority서버에서 생성된 액터로 모든 권한을 가짐, 로직 실행의 주체.

📝 핵심 개념

  • LocalRole vs RemoteRole
    • LocalRole은 현재 실행 중인 시스템(서버/클라이언트)에서의 역할
    • RemoteRole은 반대편 시스템에서의 역할
    • 실제 네트워크 패킷에는 LocalRole만 포함된다
  • 서버에서의 NetRole
    • 모든 액터의 LocalRole은 항상 ROLE_Authority
    • 클라이언트에게 복제할 때는 상황에 따라 RemoteRole이 결정된다.
  • 클라이언트에서의 NetRole
    • 플레이어가 제어하는 액터는 ROLE_AutonomousProxy
    • 다른 플레이어의 액터는 ROLE_SimulatedProxy
    • 서버에서 복제되지 않은 액터는 ROLE_None

🛠️ 실전 팁

  • AController::IsLocalController() 또는 APawn::IsLocallyControlled()를 통해 현재 액터가 로컬에서 제어 중인지 확인 가능
  • NetRole을 활용하면 서버 전용 로직과 클라이언트 전용 로직을 분리하여 작성할 수 있어, 네트워크 최적화와 보안에 유리

📌 오늘의 깨달음

  • NetRole은 단순한 속성이 아니라, 언리얼 네트워크 구조의 핵심 철학을 담고 있다. 액터가 어디서 생성되었고, 누가 제어하며, 어떤 권한을 가지는지를 명확히 이해해야 안정적인 멀티플레이 게임을 만들 수 있다.
profile
🕹️🎮🍱✈️📸 안녕하세요! 게임개발에 도전하고 있습니다!

0개의 댓글