IUnity3D技术之多人游戏基础.docxVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IUnity3D技术之多人游戏基础

1.总览。多人游戏基本结构:Clent/Server,分为Authoritative Server和Non-Authoritative Server两种,前者客户端发送消息,服务器端反馈结果,好处是有效防止客户端作弊,并统一不同客户端之间的物理表现和互动状况,缺陷是存在网络延时,很有可能每发出一个命令要过一段时间才能接收到反馈。解决方法是client-side prediction客户端预测,客户端预测服务器的反馈,但不能做出关键性事件的预测,比如某个怪物的死亡。关于client-side prediction技术可以到网上查阅相关资料,这里不赘述。Non-Authoritative Sever有客户端自己处理用户输入和对象逻辑,不需要要client-side prediction技术。这种情况服务器端要处理的数据量相对比较小。网络通信的方法:Remote Procedure Calls(RPC,远程进程调用)和State Synchronization(状态同步)。NAT punchthrough:网络连接可能是复杂的,比如中间要通过一个带公共IP的NAT路由器,怎样把NAT的内部私有IP和外部计算机连接?可以利用一个叫做Facilitator的服务器和private IP接触并获知其所用的IP地址和端口号。另外,内部防火墙玩家可以更改设置,外部防火墙也可以使用这种NAT punchthrough技术穿透。Minimizing Network Bandwidth:最小化网络开支,只传输绝对重要的数据,比如客户端完全可以独立处理角色模型而不需要服务器发送数据来同步。另外记住,你可以使用一个自带关卡标示的RPC调用来让所有客户端同时装载这个关卡。2.基础函数。建立服务器:Network.InitializeServer().函数原型:static function InitializeServer (connections : int, listenPort : int, useNat : boolean) : NetworkConnectionError其中connections是允许连接数,useNat是否允许NAT punchthrough连接。一个初始化例子:?1234567public class example : MonoBehaviour { ?void LaunchServer() { ?Network.incomingPassword = HolyMoly; ?bool useNat = !Network.HavePublicAddress(); ?Network.InitializeServer(32, 25000, useNat); ?} }其中Network.HavePublicAddress()查看是否拥有IPV4公共IP.这是简单那的测试方法,另外一个更值得研究的方法是Network.TestConnction().建立连接到服务器:Network.Connect().熟悉一下Network类总是有好处。使用Network View组件进行通信,这一点很重要,它让你可以使用RPC调用和State Synchronization.每个组件有一个唯一的NetworkViewID,每个数据包都对应发送到一个由NetworkViewID指定的Network View所链接的对象上。当使用Network.Instantiate()创建Network对象时,会自动分配Network View,不用开发者操心。当然你也通过RPG调用在每个客户机上实例化一个Network View对象,然后使用Network.AllocateViewID()函数手动分配NetworkViewID。当你向一个对象添加NetworkView组件,并指定状态同步,需要选择NetworkView所监视的组件,这可以是该对象的transform,animation,script,或是rigidbody.如果不使用状态同步而只是用PRC调用,则state Synchronization设为off即可,只要有一个Network View(不论是否开启state Synchronization)你都可以使用RPC.设置state Synchronization为Reliable Delta Compression,为可靠传输,数据按序发送接收。同步监视对象是script时,需要使用OnSerializeNetworkView显式化序列数据:?1234function OnSerializeNetworkView (stream : BitStream, info : NetworkMessageInfo) { ?var horizontalInp

文档评论(0)

wangz118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档