게임 개발/학습 일지

언리얼 내배캠 - 언리얼 멀티플레이 기초 NetRole

이개 2026. 6. 18. 12:57

액터가 서버 PC에 스폰되어있는지, 클라이언트 PC에 스폰되어있는지, 그 액터의 멤버 함수가 서버 PC에서 실행되고 있는지, 클라이언트 PC에서 실행되고 있는지도 파악해야한다.

서버에 스폰된 액터가 가진 NetRole 속성값은 언제나 Authority
-> 그래서 게임에 중대한 영향을 끼치는 로직은 NetRole이 Authority일 때 수행
 

NetRole이 Authority인 액터가 클라이언트로 복제되었을 때 복제된 액터의 NetRole 속성값은 Proxy이다. 여기서는 중요한 로직을 수행해서는 안 된다.
 
로컬 롤과 리모트 롤
  • 현재 동작하는 컴퓨터에서의 롤을 로컬 롤(Local Role)이라고 한다.
  • 커넥션으로 연결된 컴퓨터에서의 롤을 리모트 롤(Remote Role)이라고 한다.
 
NetRole의 종류
  • None
  • Authority
  • Autonomous Proxy
  • Simulated Proxy
 
로그 찍어보기
 
FString LocalRoleString = UEnum::GetValueAsString(TEXT("Engine.EnetRole"), InActor->GetLocalRole());
GetValueAsString이 String을 만들어준다.
 
Pawn클래스를 하나 만든다.
 
Wordl Settings에 만든 Pawn을 할당하고 실행해보면 로그를 확인할 수 있다.
 
  • Client 2개는 로컬 롤이 ROLE_Authority, 리모트 롤은 ROLE_SimulatedProxy.
  • PossessedBy가 된 뒤에 Autonomous Proxy가 됨.
  • AActor::HasAuthority(): 주요 로직 실행 권한 확인. NetRole이 Authority이면 서버이므로 서버인지 확인 가능. 다만 리슨 서버는 플레이어도 겸하기 때문에 true라고 해서 플레이어가 아니라고 단정할 수는 없다. Standalone이어도 true가 나온다. 
  • AController::IsLocalController(): 입력 관련 로직이나 UI는 Autonomous Proxy에서 수행되어야한다. 이를 확인하는 함수.
  • APawn::IsLocallyControlled():  IsLocalController를 래핑했다고 보면 된다.
 
각 액터에 따른 특징
  • 게임모드
  • 애니메이션 재생이나 UI 관련 로직