区分服务器和客户端,玩家的控制权


在蓝图中有一个区分服务器和客户端的宏:SwitchHasAuthority

宏里判断了Server和Client

 FORCEINLINE_DEBUGGABLE bool AActor::HasAuthority()const

{

return (Role == ROLE_Authority);       //为真就表示是Server控制的角色,说明这个东西实在服务器上的;

}

引擎的EegineTypes.h有角色代理类型的枚举

同步:

物体(Actor)有一个复制属性,若为Ture则表是该物体可以进行网络复制,同步到其他Client。

 

 如果要实现Actor的网络同步,则Replicates必须为Ture,且需要在Sercer端执行逻辑。

Acotr在Server端和Client的表现大概有:以生成一个物体为例

Replicates == Ture

1.在某Client调用本地执行的逻辑本地会生成一个物体,则其他Client端和Server端不会生成物体;

2.某Client在本地向Server端发起请求生成一个物体,在Server上生成一个物体,则Server和所有Client都会生成物体;

Replicates == False

1.在某Client调用本地执行的逻辑本地会生成一个物体,则其他Client端和Server端不会生成物体;

2.某Client在本地向Server端发起请求生成一个物体,在Server上生成一个物体,所有Client都不会生成物体;

通常使用的EventBeginPlay生成物体其实在Server和Client都生成了一个

Server和Client都不会有物体生成:

5键是在本地执行的,按下后本地的值为Ture,Tick事件会在Client和Server都调用,所以所以Tick可以看作

Server调用:Server端的值还是False,不执行后面逻辑

Client调用:在Switch。。处停止

Owner:

链接:      https://api.unrealengine.com/CHN/Gameplay/Networking/Actors/OwningConnections/index.html