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

时间:2020-07-03 20:20:04   收藏:0   阅读:55

在蓝图中有一个区分服务器和客户端的宏: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

原文:https://www.cnblogs.com/fuhaiqing/p/13228541.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!