Make Unreal REAL.
article thumbnail
조준 동작 동기화

Unreal Engine 5 C++ Multiplayer Shooter Combat 컴포넌트에 조준 중인지 여부를 저장하는 bAiming 속성을 선언하고 복제되도록 한다. 조준에 우클릭을 매핑하고 함수를 바인딩한다. 캐릭터 클래스에서 IsAiming() 함수를 제공한다. 캐릭터 클래스는 Combat 컴포넌트의 friend로 설정되어 있기 때문에 private 멤버에 바로 접근할 수 있다. Combat 컴포넌트는 캐릭터 클래스를 위해 특별히 제작된 컴포넌트이기 때문에 friend로 선언해도 괜찮다. 애니메이션 블루프린트에서 사용하기 위해 애님 인스턴스에 bAiming 속성을 추가한다. 애니메이션 블루프린트 수정 서버에서 조준할 경우는 동기화되는데 클라이언트에서는 되지 않는다. 서버에서 조준할 경우만 리플리..

article thumbnail
웅크리기 동작 동기화

Unreal Engine 5 C++ Multiplayer Shooter Shift 키를 웅크리기로 매핑하고 바인딩한다. ACharacter::Crouch(), UnCrouch() 함수는 웅크리기를 요청하는 함수일 뿐, 직접 실행하지는 않는다. ACharacter::bIsCrouched 속성을 통해 웅크린 상태인지 확인할 수 있으며, 복제된 변수이므로 클라이언트에 자동으로 업데이트가 전송된다. 클라이언트에서도 서버 RPC 등을 이용하는 것으로 추측된다. OnRep_IsCrouched() 함수를 오버라이드해, 웅크리기와 일어서기에 추가 기능을 구현할 수도 있다. 애니메이션 블루프린트에서 웅크리기 애니메이션을 적용하기 위해, 애님 인스턴스에 bIsCrouched 속성을 선언한다. 애니메이션 블루프린트에서 상태..

article thumbnail
무기 장착 애니메이션 동기화

Unreal Engine 5 C++ Multiplayer Shooter 애님 인스턴스에 무기를 소지 중인지 저장하는 변수를 선언한다. 캐릭터 클래스에서 Combat 컴포넌트의 EquippedWeapon 프로퍼티를 통해 무기 소지 여부를 함수로 제공한다. NativeUpdateAnimation() 함수에서, 애니메이션 블루프린트에서 사용할 무기 소지 여부를 갱신한다. 애니메이션 블루프린트에 Equipped 상태를 추가하고, 무기 소지 여부와 Blend Poses by bool 노드를 이용해 포즈를 변경하도록 한다. 그런데 서버에서만 무기 소지 애니메이션으로 변경됐고, 클라이언트에서는 애니메이션이 변경되지 않았다. 액터 컴포넌트의 SetIsReplicated() 함수는 액터가 리플리케이션 중일 때 액터의 일..

article thumbnail
RPC (Remote Procedure Call)

Unreal Engine 5 C++ Multiplayer Shooter RPC (원격 프로시저 호출, Remote Procedure Call) 로컬에서 호출하지만, 다른 원격 컴퓨터에서 실행되는 함수 인자를 전달할 수 있다. Actor에서 호출되어야 한다. (Actor Component에서도 호출할 수 있다.) Actor는 Replicated 상태여야 한다. RPC 함수 선언 의미 UFUNCTION(Server) void ServerRPCFunction(); 클라이언트가 서버에 RPC를 요청 UFUNCTION(Client) void ClientRPCFunction(); 서버가 클라이언트에 RPC를 요청 UFUNCTION(NetMulticast) void MulticastRPCFunction(); 서버가 ..

article thumbnail
무기 장착

Unreal Engine 5 C++ Multiplayer Shooter 캐릭터에서 전투 관련 기능을 관리하기 위해 새로운 액터 컴포넌트를 생성한다. 당장은 Tick 기능을 사용하지 않을 것이므로 꺼준다. 캐릭터에 액터 컴포넌트를 추가한다. 액터 컴포넌트의 리플리케이션은 변수와는 다른 방식으로 지정한다. 컴포넌트를 소유한 Actor는 복제된 상태여야 한다. UActorComponent::SetIsReplicated() 함수에 true를 전달한다. 액터의 생성자에서 호출하면 그 액터에서만 복제하겠다는 뜻이고, 컴포넌트 자체의 생성자에서 호출하면 항상 복제된 컴포넌트로 사용하겠다는 뜻이다. UPROPERTY(Replicated) 매크로, GetLifetimeReplicatedProps() 함수에 등록 등은 하..

article thumbnail
RepNotify

Unreal Engine 5 C++ Multiplayer Shooter 서버에서 조종 중인 캐릭터가 무기와 겹치지 않는 이상, 서버에서도 다른 캐릭터로 인해 획득 위젯을 띄울 필요는 없다. 따라서, Tick() 함수에서 위젯을 띄우던 부분은 제거한다. RepNotify 함수는 복제된 변수의 업데이트를 수신할 때마다 호출되는 콜백 함수다. UFUNCTION() 매크로를 지정해야 한다. "OnRep_변수명" 명명 규칙을 사용한다. 복제된 변수에는 UPROPERTY(ReplicatedUsing = RepNotify 함수) 매크로를 지정해준다. OverlappingWeapon의 값이 NULL로 변경된 것이 아니라면 획득 위젯을 띄우도록 한다. 서버에서 캐릭터 2가 무기와 겹치면서 OverlappingWeapon..

검색 태그