ue4 rpc php,UE4 Net role, Replicated and RPC

Net Role

AActor.Role描述了角色的网络属性,从而决定了rpc和replicated时的行为表现。这3个网络Role属性分别是:ROLE_Authority,ROLE_AutonomousProxy,ROLE_SimulatedProxy

ROLE_Authority,在服务器上的所有角色都是Authority属性

ROLE_AutonomousProxy,客户端上的本地角色

ROLE_SimulatedProxy,客户端上的网络角色

so

服务器上的所有角色都是Authority属性,当前控制的角色可以用IsLocalControlled区分

客户上当前控制的角色具有Autonomous属性

客户端上的远程角色具有SimulatedProxy属性

Actor 的 Role 和 RemoteRole 属性

Net Mode

ENetMode AActor.GetNetMode()

NM_Standalone,

/** Standalone: a game without networking, with one or more local players. Still considered a server because it has all server functionality. */

NM_DedicatedServer,

/** Dedicated server: server with no local players. */

NM_ListenServer,

/** Listen server: a server that also has a local player who is hosting the game, available to other players on the network. */

NM_Client,

/**

* Network client: client connected to a remote server.

* Note that every mode less than this value is a kind of server, so checking NetMode < NM_Client is always some variety of server.

*/

Replicated Data

Actor中的Replicated数据自动复制到所有客户端上

客户端数据不能复制到服务器,只会在客户端本地生效

so

如果数据定义为replicated,最好仅在server上进心更新,在client上只读,避免引起不必要的混淆。

这样判断端的属性:

在C++中判断是否为服务器:Role == ROLE_Authority

在BP中判断是否为服务器:HasAuthority

Replicated的数据在bp中set/get的时候会头顶多顶2个小球

Replicated Data in C++

#include "Net/UnrealNetwork.h"

UPROPERTY(BlueprintReadOnly,Replicated)

float Health;

------

voidATestNetworkCharacter::GetLifetimeReplicatedProps(TArray< FLifetimeProperty> & OutLifetimeProps) const

{

Super::GetLifetimeReplicatedProps(OutLifetimeProps);

DOREPLIFETIME(ATestNetworkCharacter, Health);

}

如果不包含头文件UnrealNetwork.h会报错:

error C3861: 'DOREPLIFETIME': identifier not found

RPC

函数有3种replication方式

Multicast---在服务器调用,然后自动转到客户端

Server---被客户端调用,仅在服务器执行;必须在有Net Owner的Actor上使用

Client---被服务器调用,仅在其所有者客户端执行;必须在有Net Owner的Actor上使用

Net Owner

Actor如果是Player controller或被Player Controller所拥有,则此actor有Net Onwer

也就是说除了多播,rpc函数如果想调用成功必须有以下限制条件

Actor是一个Player Controller类型;

Actor被一个Player Controller所拥有;

您必须满足一些要求才能充分发挥 RPC 的作用:

https://docs.unrealengine.com/latest/CHN/Gameplay/Networking/Actors/RPCs/index.html

它们必须从 Actor 上调用。

Actor 必须被复制。

如果 RPC 是从服务器调用并在客户端上执行,则只有实际拥有这个 Actor 的客户端才会执行函数。

如果 RPC 是从客户端调用并在服务器上执行,客户端就必须拥有调用 RPC 的 Actor。

xxx

xxx

xxx

xxx

xxx

xxx

xxx

xxx

xxx

posted on 2017-01-14 16:51 的笔记 阅读(1611) 评论(0)  编辑 收藏 引用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值