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

 

애님 인스턴스에 무기를 소지 중인지 저장하는 변수를 선언한다.

 

 

캐릭터 클래스에서 Combat 컴포넌트의 EquippedWeapon 프로퍼티를 통해 무기 소지 여부를 함수로 제공한다.

 


NativeUpdateAnimation() 함수에서, 애니메이션 블루프린트에서 사용할 무기 소지 여부를 갱신한다.

 


애니메이션 블루프린트에 Equipped 상태를 추가하고, 무기 소지 여부와 Blend Poses by bool 노드를 이용해 포즈를 변경하도록 한다.

 

 

그런데 서버에서만 무기 소지 애니메이션으로 변경됐고, 클라이언트에서는 애니메이션이 변경되지 않았다.

 

 

액터 컴포넌트의 SetIsReplicated() 함수는 액터가 리플리케이션 중일 때 액터의 일부로서 같이 관리되도록 할 뿐, 컴포넌트 내부의 값들까지 복제해주지는 않는다.

  • 무기 장착 함수는 서버에서만 호출된다.
  • 따라서, Combat 컴포넌트의 EquippedWeapon은 서버를 제외한 모든 클라이언트에서는 NULL이다.

 

 

그러므로, Combat 컴포넌트의 EquippedWeapon 프로퍼티가 복제되도록 수정해줘야 한다.

  • 캐릭터 클래스의 생성자에서 Combat 컴포넌트를 리플리케이션하도록 설정했다.

 

 

이제 다음과 같은 과정을 거쳐 클라이언트에도 애니메이션이 적용된다.

 

무기 획득 요청은 항상 서버에서 처리한다.

 

 

복제된 액터 컴포넌트에서 값이 변경되면, 서버는 변수 리플리케이션을 통해 모든 클라이언트에게 EquippedWeapon 프로퍼티의 업데이트 요청을 보낸다.

 

 

애님 인스턴스의 Tick 기능인 NativeUpdateAnimation() 함수에서 무기 장착 여부를 갱신하고, 애니메이션 블루프린트에서 최종적으로 적용된다.

 

 

클라이언트에서도 무기 장착 애니메이션이 재생된다.

 

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

조준 동작 동기화  (0) 2023.04.06
웅크리기 동작 동기화  (0) 2023.04.05
RPC (Remote Procedure Call)  (0) 2023.04.04
무기 장착  (0) 2023.04.04
RepNotify  (0) 2023.04.03
profile

Make Unreal REAL.

@diesuki4

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

검색 태그