원격 프로시저(함수) 호출의 약자
원격 컴퓨터에 있는 함수를 호출할 수 있도록 만든 통신 프로토콜
네트워크 멀티플레이에서 서버와 클라이언트간에 빠르게 행동을 명령하고 정보를 주고받는데 사용
언리얼 엔진에서 클라이언트에서 서버로 통신하는 유일한 수단을 제공
버전 5.0부턴 UFUNCTION()에 Reliable/Unreliable 키워드를 필수로 넣어야 합니다.
서버에서 클라이언트로 호출하는 RPC
이를 활용해 특정 클라이언트에게만 명령을 보낼 수 있음
서버에서 명령을 보낼 클라이언트의 커넥션을 소유한 액터를 사용해야 함 (AActor::GetNetConnection)

클라이언트에서 서버로 호출하는 RPC
언리얼 엔진 구조에서 유일하게 클라이언트가 서버의 함수를 호출할 수 있는 기능
서버쪽에서 클라이언트의 명령을 검증할 수 있는 함수를 구현할 수 있음 (Validation)
Client RPC와 동일하게 서버와의 커넥션을 소유한 액터를 사용해야 함

서버를 포함해 모든 플레이어에게 명령을 보내는 RPC
프로퍼티 리플리케이션과 유사하게 연관성 기반으로 동작함 (커넥션을 소유하지 않아도 동작)
프로퍼티 리플리케이션과 유사하지만 다른 용도로 사용


- GetNetConnection()
오너십을 확인하는 방법
Owner의 NetConnection을 반환
Owner가 Pawn이라면 Controller의 NetConnection을 반환
Owner가 PlayerController라면 Player가 있는지 확인 후 자신의 NetConnection을 반환액터의 Owner를 PlayerController를 가진 Pawn으로 설정하거나, PlayerController로 설정하면 해당 액터는 오너십을 가짐
비신뢰성 RPC는 의도한 목적지 도착이 보장되지 않지만, 신뢰성 RPC보다 더 자주, 더 빨리 전송할 수 있습니다. 비신뢰성 RPC는 게임플레이에 중요하지 않거나 매우 자주 호출되는 함수에 가장 적합합니다. 예를 들어, 액터 무브먼트는 프레임마다 변경될 수 있기 때문에 비신뢰성 RPC를 사용하여 리플리케이트됩니다.
신뢰성 RPC는 의도한 목적지 도착을 보장하며, 성공적으로 수신될 때까지 큐에 남아 있습니다. 신뢰성 RPC는 게임플레이에 중요하지만, 그렇게 자주 호출되지 않는 함수에 가장 적합합니다. 신뢰성 RPC의 예로는 콜리전 이벤트, 무기 발사 시작 또는 종료, 액터 스폰 등이 있습니다.
신뢰성 함수를 과도하게 사용하면 해당 함수의 큐가 오버플로우될 수 있습니다. 그러면 강제로 접속이 끊어집니다. 프레임 단위로 리플리케이티드 함수를 호출할 경우에는 함수를 비신뢰성으로 만들어야 합니다. 플레이어 입력에 바인딩된 신뢰성 함수가 있다면, 플레이어가 해당 함수를 호출할 수 있는 빈도를 제한해야 합니다.
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/networking-overview-for-unreal-engine#팁및추가자료
생성자에서 IsLocallyControlled() 함수 사용 주의, 아직 할당된 컨트롤러가 없는 상태
Tick 및 빈번하게 호출되는 함수에 Reliable RPC를 사용하지 말 것
NetMulticast RPC의 잦은 사용은 네트워크 부하를 가중시키니 신중을 기할 것
게임 플레이 및 액터 상태에 영향을 미치는 경우 RPC보다 프로퍼티 리플리케이션을 사용할 것
항목에 따라 기획에 맞게 사용하고 있는지 인지하면서 개발하기
HasAuthority() 함수를 사용해 호출 지점에 대한 파악
IsLocalController() 또는 IsLocallyControlled() 함수를 사용해 오너십을 파악


유사점
서버와 모든 클라이언트의 지정한 함수를 호출할 수 있음
지정한 데이터 전송을 보장할 수 있음
액터의 오너십과 무관하게 연관성으로 동작함
차이점
프로퍼티 리플리케이션으로 설정한 데이터는 클라이언트에 반드시 동기화됨 (RPC 전송의 Reliability와 다른 개념)
NetMulticast RPC를 호출한 타이밍에 클라이언트가 없으면 해당 데이터를 받을 길이 없음
정리
프로퍼티 리플리케이션은 게임에 영향을 미치는 데이터에 사용 (Gameplay Property)
NetMulticast RPC는 게임과 무관한 휘발성 데이터에 사용 (Cosmetic)
https://github.com/dnjfs/ArenaBattle_Network/commit/32d3e30709948555f18da500db4d8b9da6d98183