UE多人网络游戏中Actor的Network Role属性

多人网络游戏中,每个Actor都具有一个Network Role属性,一个Actor的Network Role属性决定了哪台机器能够控制这个Actor。代码中的对应类型为ENetRole

  • 如果在本机上,该Actor为Authority,则表明本机掌控着该Actor的状态信息,并且会将信息复制到网络多人会话中的其他机器上,权威性基本只可能出现在服务器。
  • 如果在另一台机器上,同样的这个Actor的Network Role属性为Proxy,则表明,本机上的该Actor是一个副本,它从服务器的AuthorityActor那里接收复制的消息。

Network Role属性通过Local RoleRemote Role变量来跟踪,Local Role表示该Actor在本机上的权限属性,而Remote Role表示该Actor在远程服务器或客户端上的权限属性。

Network Role有以下四个枚举量:

  • None:该Actor在网络游戏中没有扮演任何角色,并且不会进行数据复制
  • Authority:该Actor具有权威性(通常只在服务器上出现),并且将其信息复制到其他机器(客户端)上它的远程代理Actor上
  • Simulated Proxy:该Actor是一个模拟代理,并不被本机的输入所控制,它在模拟另一台机器(服务器)上的权威Actor。在网络游戏中,大多数Actor,比如可拾取物品、投射物或其他可交互对象等,在远程客户端上都会显示为Simulated Proxy
  • Autonomous Proxy:该Actor是一个远程自主代理(类似自治区的概念,能够自治,但是中央仍然要管控),能够接收本地的一些输入,执行一些功能,但会从权威Actor那里接收校正。自主代理通常用于玩家直接控制的角色,比如游戏中的Pawn

UE默认采用的 server-authoritative 模型,意味着服务器始终对游戏状态拥有控制权,所有信息都会从服务器复制到客户端。因此基本可以这样说:服务器上的Actor的Local Role变量肯定为Authority,而在远程客户端上的对应ActorLocal Role变量则具有Simulated Proxy(比如本机客户端上的其他玩家的角色)或Autonomous Proxy(本机上我控制的角色)。不局限于角色,一些其他随游戏的进行会改变状态的玩意儿都有这个属性。。。

举例

  • 通过代码,获取当前游戏内所有角色的Local Role变量的内容(通过AActor::GetLocalRole()),我的主机作为一个Listen-Server,有两个玩家加入会话,一起玩游戏,这里三个角色的Local Role变量的内容都是Authority,因为我提供的服务器,服务器对这三个角色的控制权是权威的。
    在这里插入图片描述
  • 当我是一个客户端,连接到一个服务器,加入一个游戏会话,在我的电脑上,我控制的角色是区域自治代理的,我的输入可以控制它,而其他所有玩家的角色,我都没有任何控制权,他们的属性就是模拟代理,纯粹的模拟服务器上的该角色的状态。
    在这里插入图片描述
  • 通过代码,获取当前游戏内所有角色的Remote Role变量的内容(通过AActor::GetRemoteRole()),当我不是服务器的时候,我所看到的三个角色的RemoteRole变量都是Authority的,因为在非服务器机器上Remote Role就代表在远程服务器上的该角色控制权限。
    在这里插入图片描述
  • 最特殊的是,我作为一个 listen server 时,我所控制的角色的Remote Role变量为Autonomous Proxy,而其他客户端所控制的角色为Simulated Proxy
    在这里插入图片描述

我能理解在服务器上其他角色是在远程即客户端上的权限都是模拟代理,但是为啥我自己的角色在远程,即客户端上的权限不是模拟代理呢?难道他们有人能控制我的角色么??? 好像确实是。。我作为监听服务器 我即是客户端又是服务器,我的角色在远程确实有一个客户端能直接控制,那个客户端就是我自己。。。所以,我的角色的Remote Role应该有两种值,即自治和模拟,在远程其他客户端是模拟,在远程我自己客户端是自治,GetRemoteRole()函数选择在监听服务器上返回Autonomous Proxy
更新:在某些版本中,监听服务器上的所有角色的Remote Role全都是Simulated Proxy,我觉得确实这样会比较合理一些。。。
在这里插入图片描述

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宗浩多捞

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值