개인 강의/Unreal Engine 멀티플레이어 게임 개발

Unreal Engine 멀티플레이어 게임 개발 2-1

jh009 2026. 7. 29. 17:34

2-1. Remote Procedure Call 기초

RPC(Remote Procedure Call)

호출하는 PC와 실행하는 PC가 달라도 되게끔 해주는 통신 기법.


언리얼에서 RPC의 용도

  • 게임에 큰 영향을 끼치지 않는 일시적인 효과들에 사용하는 편.
  • 주로 코스메틱(사운드, 파티클 등)에 사용.
  • 게임에 큰 영향을 끼치는 것들은 프로퍼티 레플리케이션을 사용하는 것이 좋음.

RPC 관련 표

기본적으로 Invoking PC과 Running PC를 구분하고 있음.


Call

  • 정적인 의미.
  • 컴파일 타임에 어떤 함수인지, 호출하는 곳과 실행하는 곳이 정해져야 함.
  • 지금까지 정의했던 일반적인 전역 함수와 멤버 함수가 이에 해당.
  • 직접적으로 함수를 호출하고 실행해야 함. (Direct)

Invoke

  • 동적인 의미.
  • 런타임에 어떤 함수인지, 호출하는 곳과 실행하는 곳이 어딘지 정해짐.
  • 함수 포인터, 동적 바인딩, RPC 같은 개념들이 이에 해당.
  • 간접적으로 함수를 호출하고 실행해야 함. (Indirect)
  • RPC도 마찬가지로 RPC를 Invoke라고 표현.

서버로부터 RPC가 호출되었다. / 클라이언트로부터 RPC가 호출되었다. 라고 생각하면됨.

invoked > 호출

Run > 실행


Actor Ownership

  • 네트워크 멀티플레이가 적용되려면, 액터는 서버에서 스폰되고 bReplicates가 true여야 함.
  • 서버에서 스폰된 후 SetOwner(PlayerController) 함수를 호출해야 Client-Owned Actor가 됨.

PlayerController Local PlayerController와 같다면, Client-Owned Actor.

예시: 내 플레이어 캐릭터

 

PlayerControllerLocal PlayerController와 다르다면, Owned by different client.

예시: 내 화면에 보이는 친구의 플레이어 캐릭터

 

서버에서 스폰되었지만 SetOwner() 함수 호출이 없으면, Server-Owned Actor.

예시: 보물상자 액터

 

Unowned Actor와 Server-Owned Actor를 같은 개념으로 생각해도 됨.


NetMulticast, Server, Client 키워드

UFUNCTION() 매크로와 함께 사용되는 키워드들.

 

NetMulticast

서버를 포함한 모든 클라이언트에서 해당 RPC를 실행 요청.

 

Server

서버에서 해당 RPC를 실행 요청.

 

Client

클라이언트에서 해당 RPC를 실행 요청.

  • 키워드는 해당 원격 PC에서 RPC를 실행시켜 달라는 요청을 뜻함.
  • 실제로 실행될지는 표를 통해 판단해야 함.


NetMulticast RPC


Server RPC


Client RPC


자주 쓰이는 케이스

1. RPC가 클라이언트에서 호출되고 서버에서 실행되어야 하는 경우에는 Server 키워드를 사용해야 함.

  • ClientConnection이 소유하고 있는 액터(Client-Owned)에서 RPC가 호출되어야 함.
  • _Validate() 함수에서 RPC를 실행할지 말지 결정.


RPC가 서버와 모든 클라이언트에서 실행되어야 하는 경우에는 NetMulticast 키워드를 사용해야 함.

  • 서버에서 호출해야 함.
  • 부하가 심하므로, 빈번하게 호출되게끔 코드를 작성하는 건 권장되지 않음.
    예시: Tick() 함수 내에서 NetMulticast RPC 호출.


3. RPC가 서버에서 호출되고 클라이언트에서 실행되어야 하는 경우에는 Client 키워드를 사용해야 함.

  • 서버에서 호출해야 함.


WithValidation

UFUNCTION() 매크로와 함께 사용되는 키워드.

 

서버에서 실행되는 RPC의 경우에 해당 키워드를 작성하는 것을 권장.

  • 이 키워드가 붙은 RPC를 구현 할때는 _Implementation() 함수와 _Validate() 함수로 나뉘어 짐.
  • _Validate() 함수는 해당 RPC가 서버에서 실제로 실행할지 말지 결정.
  • 서버 실행 로직은 무조건적으로 신뢰되기 때문에, 위변조를 막기 위한 방어막 역할을 함.

Unreliable VS Reliable

UFUNCTION() 매크로와 함께 사용되는 키워드.

  • RPC는 기본적으로 Unreliable 키워드를 기준으로 동작. 아무것도 안쓰면 Unreliable.
  • Unreliable은 원격 PC에서 무조건 실행되리라는 보장이 없음.
  • 반면, 원격 PC에서 무조건 실행되어야 하는 로직이라면 Reliable 키워드를 작성.

 

Unreliable의 활용 예시

  • 코스메틱(이펙트, 사운드 등)처럼 게임에 큰 영향이 없는 로직.

Reliable의 활용 예시

  • 충돌, 데미지, 스폰처럼 게임에 큰 영향을 끼치는 로직.