오늘은 무기 위에 TextWidget을 띄우고 Key Input시 무기를 장착하는 과정까지 진행하였습니다.
이 과정에서 RPC에 대해 공부를 하였고 공부 내용과 작업 현황을 공유하고자 이 글을 작성합니다.
RPC란?
RPC는 컴퓨터 프로그램이 네트워크를 통해 다른 주소 공간에서 서브루틴 또는 프로시저를 실행할 수 있게 하는 프로토콜입니다.
언리얼 엔진에서는 RPC를 이용하여 서버와 클라이언트 간에 함수를 호출하며, 게임 상태를 동기화하는데 사용합니다.
RPC 방식 종류
기본적으로 RPC 는 3가지의 방식을 갖고있습니다
- Client
- Server
- Multicast
UE5에서의 RPC 사용법
Client RPC
아래와 같은 방식의 RPC는 서버에서 호출되지만 클라이언트에서 동작됩니다.
UFUNCTION( Client )
void ClientRPCFunction();
Server RPC
아래와 같은 방식의 RPC는 클라이언트에서 호출되지만 서버에서 동작됩니다.
UFUNCTION( Server )
void ServerRPCFunction();
Multicast RPC
서버에서 호출된 다음 서버는 물론 현재 연결된 모든 클라이언트에서도 실행되도록 고안된 방식입니다
UFUNCTION( NetMulticast )
void MulticastRPCFunction();
추가 키워드(신뢰성)
기본적으로 RPC 는 비신뢰성이라 합니다.
RPC 호출이 원격 머신에서 확실히 실행되도록 하기 위해서는 Reliable 키워드를 붙이면 됩니다:
UFUNCTION( Client, Reliable )
void ClientRPCFunction();
실사용 코드 Sample
.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "BlasterCharacter.generated.h"
UCLASS()
class BLASTER_API ABlasterCharacter : public ACharacter
{
GENERATED_BODY()
...
private:
// 서버 RPC를 신뢰할 수 있도록 Reliable 선언
UFUNCTION(Server, Reliable)
void ServerEquipButtonPressed();
};
.cpp
Weapon에 Overlap시 특정 키를 입력하여 무기를 장착하는 과정
Listen서버에서 서버에 입장한 다른 pc의 클라이언트는 권한이 없기때문에 RPC를 통하지 않으면
무기 장착이 불가능하다 그래서 RPC를 통해 서버로 해당 함수를 실행해줘야 한다.
여기서 OverlappingWeapon은 리플리케이트가 적용된 데이터이다.
void ABlasterCharacter::EquipButtonPressed()
{
// 무기 장착은 서버가 해야 한다
// 서버에 권한이 있음
// HasAuthority = 서버만 호출 가능
if (Combat)
{
if (HasAuthority())
{
Combat->EquipWeapon(OverlappingWeapon);
}
else
{
// 다른 클라는 권한이 없기 때문에 무기 장착을 할 수 없다
// 그래서 RPC를 이용하여 장착
ServerEquipButtonPressed();
}
}
}
void ABlasterCharacter::ServerEquipButtonPressed_Implementation()
{
if (Combat)
{
Combat->EquipWeapon(OverlappingWeapon);
}
}
영상
'언리얼5' 카테고리의 다른 글
[UE5 Multiplayer Shooting-10] 반자동 라이플 발사, Crosshair 일부 (2) | 2023.08.08 |
---|---|
[UE5 Multiplayer Shooting-9] FABRIK IK를 활용한 무기 장착, AimOffset, FootStepSound 구현 (0) | 2023.08.06 |
[UE5 Multiplayer Shooting-7] Network Role에 관해 (1) | 2023.08.01 |
[UE5 Multiplayer Shooting-6] UE5 IK_Rig_Retargeting | IK 릭 리타겟팅 (2) | 2023.07.30 |
[UE5 Multiplayer Shooting-5] UE 멀티 플레이어 플러그인 생성 03 (8) | 2023.07.29 |
댓글