언리얼 엔진에서는 RPC(Remote Procedure Call, 원격 프로시저 호출) 을 사용하여 서버와 클라이언트 간에 함수 호출을 동기화할 수 있습니다. 하지만, 액터의 소유권(Ownership)에 따라 RPC의 실행 방식이 달라집니다.
NetMulticast RPC: 서버에서 실행되며, 모든 클라이언트에서도 실행됨.
Server RPC (Run on Server): 클라이언트가 요청하면 서버에서 실행됨.
Client RPC (Run on Owning Client): 서버가 특정 클라이언트에서 실행되도록 요청함.
소유권(Ownership): 액터가 어느 네트워크 노드(서버/클라이언트)에 속해 있는지를 결정함.
특징:
기본 실행: 서버에서 실행됨.
NetMulticast RPC: 서버와 모든 클라이언트에서 실행됨.
Server RPC: 서버에서 실행됨.
Client RPC: 해당 액터를 소유한 클라이언트에서만 실행됨.
UFUNCTION(Server, Reliable)
void ServerFunction();
UFUNCTION(NetMulticast, Reliable)
void MulticastFunction();
UFUNCTION(Client, Reliable)
void ClientFunction();
동작 방식:
ServerFunction() → 서버에서 실행됨.
MulticastFunction() → 서버와 모든 클라이언트에서 실행됨.
ClientFunction() → 액터를 소유한 클라이언트에서만 실행됨.
(다른 클라이언트에서는 실행되지 않음)
특징:
기본 실행: 서버에서 실행됨.
NetMulticast RPC: 서버와 모든 클라이언트에서 실행됨.
Server RPC: 서버에서 실행됨.
Client RPC: 서버에서 실행됨 (클라이언트에서 실행되지 않음).
UFUNCTION(Client, Reliable)
void ClientOnlyFunction(); // 서버 소유 액터에서는 실행되지 않음.
UFUNCTION(Server, Reliable)
void ServerFunction(); // 서버에서 정상 실행됨.
UFUNCTION(NetMulticast, Reliable)
void MulticastFunction(); // 서버와 모든 클라이언트에서 실행됨.
동작 방식:
ClientOnlyFunction() → 클라이언트에서 실행되지 않음! (서버 소유 액터는 클라이언트에서 실행 불가)
ServerFunction() → 서버에서 실행됨.
MulticastFunction() → 서버와 모든 클라이언트에서 실행됨.
특징:
기본 실행: 서버에서 실행됨.
NetMulticast RPC: 서버와 모든 클라이언트에서 실행됨.
Server RPC: 서버에서 실행됨.
Client RPC: 서버에서 실행됨 (클라이언트에서 실행되지 않음).
UFUNCTION(Server, Reliable)
void ServerFunction();
UFUNCTION(Client, Reliable)
void ClientFunction(); // 실행되지 않음!
UFUNCTION(NetMulticast, Reliable)
void MulticastFunction();
동작 방식:
ServerFunction() → 서버에서 실행됨.
ClientFunction() → 실행되지 않음! (소유권이 없으므로, 클라이언트에서 실행할 수 없음)
MulticastFunction() → 서버와 모든 클라이언트에서 실행됨.
특징:
레플리케이션 안된 상태: 호출한 클라이언트에서 실행됨.
NetMulticast RPC: 모든 클라이언트에서 실행됨.
Server RPC: 서버에서 실행됨.
Client RPC: 호출한 클라이언트에서 실행됨.
UFUNCTION(Server, Reliable)
void ServerFunction(); // 서버에서 실행됨.
UFUNCTION(Client, Reliable)
void ClientFunction(); // 소유한 클라이언트에서만 실행됨.
UFUNCTION(NetMulticast, Reliable)
void MulticastFunction(); // 모든 클라이언트에서 실행됨.
동작 방식:
ServerFunction() → 서버에서 실행됨.
ClientFunction() → 액터를 소유한 클라이언트에서만 실행됨.
MulticastFunction() → 모든 클라이언트에서 실행됨.
특징:
레플리케이션 안된 상태: 호출한 클라이언트에서 실행됨.
NetMulticast RPC: 호출한 클라이언트에서 실행됨 (다른 클라이언트에는 영향 없음).
Server RPC: 실행되지 않음 (Dropped).
Client RPC: 호출한 클라이언트에서만 실행됨.
UFUNCTION(Server, Reliable)
void ServerFunction(); // 실행되지 않음! (서버에서 Dropped 됨)
UFUNCTION(Client, Reliable)
void ClientFunction(); // 호출한 클라이언트에서만 실행됨.
UFUNCTION(NetMulticast, Reliable)
void MulticastFunction(); // 호출한 클라이언트에서만 실행됨.
동작 방식:
ServerFunction() → 실행되지 않음 (서버에서 Dropped됨).
ClientFunction() → 호출한 클라이언트에서 실행됨.
MulticastFunction() → 호출한 클라이언트에서만 실행됨 (다른 클라이언트에는 실행되지 않음).
Client RPC는 액터를 소유한 클라이언트에서만 실행 가능.
Server RPC는 서버에서 실행되지만, 소유권이 없는 경우 Dropped 될 수 있음.
NetMulticast는 서버와 모든 클라이언트에서 실행 가능.