UE4 RPC进行网络同步

说明

基于UE本身提供的RPC同步机制
RPC远程过程调用允许客户端或服务器通过网络连接相互发送消息:
使用时需要注意:
1、必须从 Actor 上调用
2、Actor 必须被复制,注意勾选BP中Replicates,或使变量bReplicates = true
在这里插入图片描述

3、注意如果 RPC 是从Client调用并在Server上执行,客户端就必须拥有调用 RPC 的 Actor。
所以在属性同步的地方设置此Actor的Owner,主要用于网络复制,玩家离开交互时Owner置空
在这里插入图片描述
PS:引申:考虑到每一位客户端对该actor接管网络消息所有权都需要SetOwner,可能会导致网络延迟或安全性隐患,此处可以根据实际情况进行优化为通过经过玩家进行RPC同步,如由玩家的component发起。

从Server调用RPC的作用范围
在这里插入图片描述

从Client调用RPC的作用范围

### RPC实现概述 在Unreal Engine 4中,通过C++实现远程过程调用(RPC)主要依赖于`UActorComponent`类中的函数标记以及特定的宏定义来声明和处理RPC。为了使一个函数能够在网络上被其他客户端或服务器调用,该函数需满足一定条件并使用适当的关键字修饰[^1]。 对于希望在网络环境中执行的操作而言,在头文件(.h)内声明成员方法时应加上`Server`, `NetMulticast`, 或者带有` Reliable/Unreliable`属性的`Client`前缀,并利用`BlueprintCallable`确保蓝图也可访问这些功能。具体到服务端发起请求至客户端的情况,则会采用如下形式: ```cpp UPROPERTY() float SomeVariable; // Server function called by clients, reliable transmission. void ServerMyFunction_Implementation(float Value); bool ServerMyFunction_Validate(float Value); ``` 当涉及到更复杂的场景如仅初始化期间同步变量状态给新加入的游戏参与者时,可以借助特殊宏指令完成此操作: ```cpp DOREPLIFETIME_CONDITION(MyClass, MyVar, COND_InitialOnly)[^3]; ``` 上述代码片段展示了如何限定某个属性只在玩家首次连接时才发送更新通知。 实际应用过程中还需注意权限验证逻辑(`_Validate`)的设计以保障网络安全性和稳定性;同时合理运用可靠(reliable)/不可靠(unreliable)传输模式优化性能表现。 ### 完整示例 下面给出一段完整的RPC实现例子,假设有一个名为`ATestActor`的角色需要向所有已连接玩家广播消息: ```cpp #include "TestActor.h" // .h 文件部分 class ATestActor : public AActor { GENERATED_BODY() public: UFUNCTION(Server, Reliable, WithValidation) void ServerBroadcastMessage(const FString& MessageText); private: UPROPERTY(ReplicatedUsing = OnRep_MessageReceived) FString LastMessage; void OnRep_MessageReceived(); }; // .cpp 文件部分 void ATestActor::OnRep_MessageReceived() { UE_LOG(LogTemp, Log, TEXT("Received replicated message: %s"), *LastMessage); } void ATestActor::ServerBroadcastMessage_Implementation(const FString& MessageText) { if (HasAuthority()) { // Only run on server LastMessage = MessageText; // Replicate this change to all clients MarkPackageDirty(); } } bool ATestActor::ServerBroadcastMessage_Validate(const FString& MessageText) { return !MessageText.IsEmpty(); } ``` 这段程序实现了从任意拥有控制权的对象处触发一次全局通告的功能,其中包含了必要的安全检查机制(_Validate),并且正确设置了数据复制规则以便及时将最新信息传递给每一个订阅者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值