Make Unreal REAL.
article thumbnail
Unreal Engine 5 C++ Multiplayer Shooter

 

멀티 플레이어 게임에서 한 캐릭터의 역할(ENetRole)에는 총 3개가 있다.

  • ROLE_AutonomousProxy
    로컬 머신에서 조작중인 캐릭터
  • ROLE_Authority
    서버에 존재하는 캐릭터
  • ROLE_SimulatedProxy
    다른 클라이언트 머신에서 Replicated 된 캐릭터
  • ROLE_None
    특별한 역할이 없다.

 

 

캐릭터 위에 역할을 표시할 위젯을 생성한다.

  • 언리얼 엔진 5.1+ 버전부터는 OnLevelRemovedFromWorld() 함수 대신, NativeDestruct() 함수를 오버라이드 하도록 한다.

 

 

레벨을 이동할 때 뷰포트에서 위젯을 제거하도록 한다.

 

 

우선은 내 머신을 기준으로 하는 Local Network Role을 가져오도록 한다.

  • 서버를 기준으로 하는 Remote Network Role도 있다.
  • APawn::GetLocalRole() 함수를 통해 가져올 수 있다.

 

 

위젯 블루프린트는 다음과 같다.

 


캐릭터에 위젯 컴포넌트를 추가한다.

 

 

생성자에서 위젯 컴포넌트를 생성한다.

  • Widget Class는 블루프린트에서 설정할 예정이다.
  • 설정된 Widget Class는 BeginPlay 시에 위젯 객체로 생성된다.

 

 

캐릭터 클래스의 Widget Component에서 Space를 Screen으로 변경해주고 Widget Class를 설정해준다.

 

Draw at Desired Size에 체크해 크기를 알아서 조정하도록 한다.

  • 매 프레임마다 내용이 바뀌어 크기가 변하는 경우 매우 큰 비용이 요구된다.

 

 

블루프린트에서 BeginPlay 시에 각자의 Local Network Role을 Screen에 띄우도록 한다.

 

 

혼자 싱글 플레이를 하는 경우이며, 서버에서 존재하므로 역할이 Authority로 표시된다.

 

싱글 플레이도 실제로는 혼자 하는 멀티 플레이로 처리된다.

 

 

3명이 참가하고 에디터를 Listen 서버로 실행시켜 본다.

 

 

Local Network Role을 표시하므로, Listen 서버에서는 모든 캐릭터가 Authority 역할을 갖는다.

 

나머지 클라이언트에서는 자신은 AutonomousProxy, 다른 플레이어는 SimulatedProxy로 표시된다.

 

따라서, Local Network Role만 보고는 어떤 캐릭터가 Listen 서버에서 제어 중인 캐릭터인지 알 수 없다.

 

 

이번에는 서버 기준인 Remote Network Role을 확인해보도록 한다.

 

 

Remote Network Role은 Local과 정확히 반대로 역할을 표시한다.

 

Listen 서버를 기준으로 역할을 판별하므로, Listen 서버에서는 자신은 AutonomousProxy, 나머지 클라이언트는 SimulatedProxy로 표시된다.

 

클라이언트의 경우, 서버 입장에서는 모두가 서버에 존재하는 캐릭터인 Authority 역할이기 때문에 전부 Autority로 표시된다.

 

'Unreal Engine > UE5 C++ Multiplayer Shooter' 카테고리의 다른 글

무기 획득 위젯 띄우기  (0) 2023.04.02
Weapon 클래스 생성  (0) 2023.04.01
Seamless Travel  (0) 2023.03.31
애니메이션 적용  (0) 2023.03.30
캐릭터 카메라와 이동  (0) 2023.03.30
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그