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

 

Combat 컴포넌트에 조준 중인지 여부를 저장하는 bAiming 속성을 선언하고 복제되도록 한다.

 

 

조준에 우클릭을 매핑하고 함수를 바인딩한다.

 


캐릭터 클래스에서 IsAiming() 함수를 제공한다.

  • 캐릭터 클래스는 Combat 컴포넌트의 friend로 설정되어 있기 때문에 private 멤버에 바로 접근할 수 있다.
  • Combat 컴포넌트는 캐릭터 클래스를 위해 특별히 제작된 컴포넌트이기 때문에 friend로 선언해도 괜찮다.

 


애니메이션 블루프린트에서 사용하기 위해 애님 인스턴스에 bAiming 속성을 추가한다.

 


애니메이션 블루프린트 수정

 


서버에서 조준할 경우는 동기화되는데 클라이언트에서는 되지 않는다.

  • 서버에서 조준할 경우만 리플리케이션을 통해 업데이트 요청을 보내고, 클라이언트에서는 값 변경을 복제하지 않고 있기 때문이다.
  • 혹시 무기가 장착되지 않으면, 핫 리로드 문제이므로 에디터를 재시작한다.

 

 

Combat 컴포넌트에 서버 RPC 함수를 만들어, 클라이언트에서 조준할 경우 서버에서도 값을 변경해 복제하도록 한다.

 


서버인 경우는 바로 값을 변경해 모든 클라이언트에 업데이트 요청을 보내고, 클라이언트인 경우는 서버 RPC 함수를 호출한다.

  • 조준 동작은 표면적인 것이기 때문에, 서버나 다른 클라이언트와 딜레이가 있어도 된다.

 

 

RPC 함수는 어디서, 어떤 상황에서 호출되는지에 따라 실행되는 곳이 다르다.

 

 

따라서, 사실 SetAiming() 함수에서는 서버인지 확인하지 않아도 된다.

  • 클라이언트에서 호출하는 서버 RPC는 당연히 서버에서 실행되고, 서버에서 서버 RPC가 호출되는 경우에도 그냥 로컬로 실행되기 때문이다.
  • 아래의 경우는 bAiming에 값을 변경하는 같은 동작을 2번 하는데, 로컬에서 먼저 조준 동작을 취하고 다른 머신에 동기화하기 위함이다.

 


이제 클라이언트에서 조준하는 경우데 동기화가 된다.

 

profile

Make Unreal REAL.

@diesuki4

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

검색 태그