Unreal Engine 5 · Blueprint → C++
Client RPC in Unreal Engine 5 C++ (UFUNCTION Client)UE Docs
A Run on Owning Client Blueprint event becomes UFUNCTION(Client, Reliable) in C++; the server calls the function and the body in ClientNotify_Implementation() executes only on the Actor's owning client.
Blueprint node & C++ equivalent
// .h
UFUNCTION(Client, Reliable)
void ClientNotify();
// .cpp
void AMyActor::ClientNotify_Implementation() { /* runs on owning client */ }What is a Client RPC?
A Client RPC is called by the server but runs only on the single client that owns the Actor. It is used to send targeted, per-player feedback such as a private notification, a personal UI prompt, or a sound only that player should hear.
The C++ equivalent
Declare UFUNCTION(Client, Reliable) void ClientNotify(); in the header and write the body in ClientNotify_Implementation() in the .cpp. The Client specifier routes the call to the owning client only, unlike NetMulticast, which reaches everyone.
Because the call targets the owner, the Actor must have a valid owning connection, typically a PlayerController or a Pawn possessed by one, for the RPC to be delivered.
Common mistakes
A Client RPC must be invoked on the server; calling it from a client runs locally and does not route. If nothing happens on the target client, check that the Actor has a proper owner set, since ownership determines which client receives the call. As always, the implementation must be the _Implementation overload.
Frequently asked questions
How do you make a Client RPC in UE5 C++?+
Declare UFUNCTION(Client, Reliable) void ClientNotify(); and implement ClientNotify_Implementation(). Call it from the server to run it on the Actor's owning client.
What is the difference between a Client RPC and a Multicast RPC?+
A Client RPC runs only on the Actor's owning client, while a NetMulticast RPC runs on the server and all clients. Use Client for private, per-player messages.
Why is my Client RPC not running on the client?+
Client RPCs must be called from the server and require the Actor to have a valid owning connection. Without a proper owner, such as a PlayerController, the call has no client to target.