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

 

 

프로퍼티 리플리케이션

액터 프로퍼티 리플리케이션 방법에 대한 상세 정보입니다.

docs.unrealengine.com

플레이어 캐릭터에서 현재 겹치고 있는 무기를 저장하도록 한다.

  • UPROPERTY(Replicated) 매크로를 지정하면 서버에서 값이 변경될 때, 다른 클라이언트에 값이 복제(동기화)된다.
  • 리플리케이션은 항상 서버 -> 클라이언트 단방향으로만 진행된다.

 

클라이언트에서 복제된 변수의 값을 바꾸는 것은 권장하지 않는다.

  • 다음 번 서버가 변화를 감지하고 업데이트를 전송할 때까지 서버의 값과 달라지게 된다.
  • 서버의 변수 값이 자주 변경되지 않는다면, 클라이언트가 보정을 받을 때까지 오랜 시간이 걸릴 수 있다.

 

 

Replicated 키워드를 지정해 준 변수의 값을 동기화하기 위해서는 GetLifetimeReplicatedProps() 함수를 오버라이드해 변수를 등록해줘야 한다.

 

 

헤더를 포함한다.

 

 

생성자에서 bReplicates 속성을 true로 설정한다.

 

 

플레이어가 현재 겹치고 있는 무기를 저장하는 OverlappingWeapon 변수를 동기화하도록 등록한다.

  • DOREPLIFETIME(클래스 이름, 변수) 매크로를 통해 등록한다.

 

 

Weapon 클래스에서 겹친 플레이어의 OverlappingWeapon 변수에 값을 설정하기 위해 Setter를 만든다.

 

 

서버에서 겹쳤을 때 바로 획득 위젯을 띄우던 부분을, 겹친 플레이어의 OverlappingWeapon에 자신을 할당하도록 변경한다.

  • 이제 획득 위젯을 띄울 시점은 캐릭터 클래스에서 결정해야 한다.

 

 

캐릭터 클래스에 획득 위젯을 띄울 함수를 제공한다.

 

 

우선 간단한 방법으로 구현해본다.

  • Tick() 함수에서 매 프레임 OverlappingWeapon의 값을 확인하도록 한다.
  • 서버에서 OverlappingWeapon의 값이 변경되어 업데이트가 전송되면, 모든 클라이언트에서도 값이 변경돼 획득 위젯을 띄우게 된다.

 

 

모든 클라이언트에서 획득 위젯을 띄웠다.

 

 

현재는 한 명의 플레이어가 무기와 겹치면 모든 클라이언트에서 획득 위젯이 뜨게 된다.

  • 겹친 플레이어를 제외하고 다른 플레이어에게까지 획득 위젯을 보여줄 필요는 없다.

 

DOREPLIFETIME_CONDITION(클래스 이름, 변수, 조건) 매크로를 통해 조건부로 업데이트를 전송할 수 있다.

  • 아래에서는 플레이어를 조종하고 있는 소유자의 머신에만 업데이트를 전송한다.

 

 

이외에도 다양한 옵션들이 있다.

 

 

플레이어 2를 조종 중인 클라이언트 2와 서버에서만 위젯이 보인다.

 

서버에서 겹침을 감지해 캐릭터 2의 OverlappingWeapon 값이 변경됐고, 소유자인 2번 클라이언트에게만 업데이트를 전송했기 때문이다.

 

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

무기 장착  (0) 2023.04.04
RepNotify  (0) 2023.04.03
무기 획득 위젯 띄우기  (0) 2023.04.02
Weapon 클래스 생성  (0) 2023.04.01
Network Role  (0) 2023.03.31
profile

Make Unreal REAL.

@diesuki4

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

검색 태그