目录
- 0 引言
- 1 RPC基本概念
- 1.1 定义
- 1.2 分类
- 2 RPC的使用
- 2.1 Client RPC
- 2.2 Server RPC
- 2.3 Multicast RPC
- 🙋♂️ 作者:海码007
- 📜 专栏:UE虚幻引擎专栏
- 💥 标题:【UE 网络】RPC远程过程调用 入门篇
- ❣️ 寄语:书到用时方恨少,事非经过不知难!
- 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正,同时有问题的话,欢迎大家留言讨论。
0 引言
RPC是UE进行网路同步的一种关键方法
官方文档
1 RPC基本概念
1.1 定义
RPC (远程过程调用)是在本地调用但在其他机器(不同于执行调用的机器)上远程执行的函数。
RPC 函数非常有用,可允许客户端或服务器通过网络连接相互发送消息。
这些功能的主要作用是执行那些不可靠的暂时性/修饰性游戏事件。这其中包括播放声音、生成粒子或产生其他临时效果 之类的事件,它们对于 Actor 的正常运作并不重要。在此之前,这些类型的事件往往要通过 Actor 属性进行复制。
1.2 分类
UE中的RPC主要分为三种类型:服务器RPC、客户端RPC和多播RPC。每种类型的RPC都有其特定的用途和调用方式。
2 RPC的使用
使用前确保开启了Actor复制的功能,这是使用一起网络通信功能的前提。
AMyCharacter::AMyCharacter()
{
bReplicates = true;
}
2.1 Client RPC
客户端RPC用于从服务器向特定客户端发送请求。通常用于服务器通知客户端执行某些操作,例如更新UI、播放动画等。
定义
UFUNCTION(Client, Reliable)
void ClientFunction();
Client
:标识这是一个客户端RPC。Reliable
:标识这个RPC是可靠的,确保消息会被传递。
示例
MyCharacter.h
UFUNCTION(Client, Reliable)
void ClientDoSomething();
MyCharacter.cpp
void AMyCharacter::ClientDoSomething_Implementation()
{
// 客户端执行的逻辑
}
在服务器调用客户端RPC:
if (HasAuthority())
{
ClientDoSomething();
}
2.2 Server RPC
服务器RPC用于从客户端向服务器发送请求。通常用于客户端请求服务器执行某些操作,例如处理玩家输入、请求数据等。
定义
UFUNCTION(Server, Reliable, WithValidation)
void ServerFunction();
Server
:标识这是一个服务器RPC。Reliable
:标识这个RPC是可靠的,确保消息会被传递。WithValidation
:标识这个RPC需要验证函数。
示例
MyCharacter.h
UFUNCTION(Server, Reliable, WithValidation)
void ServerDoSomething();
MyCharacter.cpp
void AMyCharacter::ServerDoSomething_Implementation()
{
// 服务器端执行的逻辑
}
bool AMyCharacter::ServerDoSomething_Validate()
{
// 验证逻辑(通常用于防止作弊)
return true;
}
在客户端调用服务器RPC:
if (IsLocallyControlled())
{
ServerDoSomething();
}
2.3 Multicast RPC
多播RPC用于从服务器向所有客户端发送请求。通常用于广播事件,例如游戏状态更新、全局通知等。
定义
UFUNCTION(NetMulticast, Reliable)
void MulticastFunction();
NetMulticast
:标识这是一个多播RPC。Reliable
:标识这个RPC是可靠的,确保消息会被传递。
示例
MyCharacter.h
UFUNCTION(NetMulticast, Reliable)
void MulticastDoSomething();
MyCharacter.cpp
void AMyCharacter::MulticastDoSomething_Implementation()
{
// 所有客户端执行的逻辑
}
在服务器调用多播RPC:
if (HasAuthority())
{
MulticastDoSomething();
}