Unity5网络模块UNet详解

上传人:M****1 文档编号:468850748 上传时间:2023-12-18 格式:DOCX 页数:11 大小:90.21KB
返回 下载 相关 举报
Unity5网络模块UNet详解_第1页
第1页 / 共11页
Unity5网络模块UNet详解_第2页
第2页 / 共11页
Unity5网络模块UNet详解_第3页
第3页 / 共11页
Unity5网络模块UNet详解_第4页
第4页 / 共11页
Unity5网络模块UNet详解_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《Unity5网络模块UNet详解》由会员分享,可在线阅读,更多相关《Unity5网络模块UNet详解(11页珍藏版)》请在金锄头文库上搜索。

1、Unit IT5能上我学院网woxueyuant详解UNet常见概念介:Spawn:简单来说,把服务器上的GameObject,根据上面的 Networkidentity组件找到对应监视连接,在监视连接里生成相应的 GameObject.Command:客户端调用,服务器执行,这样客户端调用的参数必需要UNet 可以序列化,这样服务器在执行时才能把参数反序列化。需要注意,在客户端需 要有权限的Networkidentity组件才能调用Command命令。ClientRpc:服务端调用,客户端执行,同上,服务端的参数序列化到客户端 执行,一般来说,服务端会找到上面的Networkidentity

2、组件,确定那些客户 端在监视这个Networkidentity,Rpc命令会发送给所有的监视客户端。学IT技能上我学院网Server/ServerCallback:只在服务器端运行,Callback是Unity内部函数。Client/ClientCallback:同上,只在客户端运行,Callback是Unity内部函 数。SyncVar:服务器的值能自动同步到客户端,保持客户端的值与服务器一样。 客户端值改变并不会影响服务器的值。上面的大部分特性都会转化成相应的MsgType,其中服务器调用,客户端执 行对应 MsgType 有如 Spawn,ClientRpc,SyncVar 对应的 Ms

3、gType 分别为 ObjectSpawn,Rpc,UpdateVars,这些都是 NetworkServer 调用,客户端得到相 应消息,执行相应方法。客户端调用,服务器执行的MsgType有如Command, 客户端发送,服务器检测到相应消息后执行。UNet主要类介绍NetworkIdentity组件介绍:网络物体最基本的组件,客户端与服务器确认 是否是一个物体(netID),也用来表示各个状态,如是否是服务器,是否是客户 端,是否有权限,是否是本地玩家等。一个简单例子,A是Host(又是服务器,又是客户端),B是一个Client,A 与B分别有一玩家PlayA与PlayB.在机器A上,p

4、layA与playB isServer为 true,isClent为true,其中playA有权限,是本地玩家,B没权限,也不是本地 玩家。在机器 B 上,playA 与 playB isServer 为 false,isClent 为 true,其中 playB学IT技能上我学院网有权限,是本地玩家,A没权限,也不是本地玩家。A与B上的PlayA的netID 相同,A与B上的PlayB的netID也相同,其中netID用来表示他们是同一网 络物体在不同的机器上。在下面用网络物体来表示带有Networkidentity组件的GameObject.Networkconnection:定义一个客户

5、端与服务器的连接,包含当前客户端监 视那些服务器上的网络物体,以及封装发送和接收到服务器的消息。Networkclient :主要持有当前Networkconnection对象与所有 Networkclient列表的静态对象,处理一些默认客户端的消息。网络物体上的监视者就是一 或多个Networkconnection,用来表示一个 或多个客户端对这个网络物体保持监视,那么当这个网络物体在服务器上更新 后,会自动更新对所有监视者的对应的网络物体。NetworkScene:简单来说,IServer与client需要维护一个网络物体列表, Server可以遍历所有网络物体发送消息等,并且维持Serv

6、er与client上的网络 物体保持同步,并且客户端记录需要注册的prefab列表.其中NetworkServer 与clientScene都包含一个NetworkScene对象,引用网络物体列表。NetworkServer :主要持有一个NetworkScene并且做一些只有在服务器上 才能对网络服务做的事,如spawn, destory等。以及维护所有客户端连接。学IT技能上我学院网ClientScene:主要持有一静态NetworkScene对象,用于注册网络物体 的prefab列表,以及客户端场景上已经有的网络物体列表,处理 SyncVar,Rpc,SyncEvent 特性等,还有以及

7、 ObjectSpawn,objectDestroy,objectHide 消息等。UNet用时想到的问题与源码的答案:问题1 : spawn发生了什么,客户端为什么要注册相应的prefab.1、当服务器spawn 一个网络物体时,网络物体调用OnStartServer,分配 netID.并注册到相应服务器上的的NetworkScene的网络物体列表中,更新如 isServer 为 true 等信息。2、查找所有客户端连接,查看每个客户端连接是否需要监视这个网络物体, 如果为true,那么给这个客户端上一消息MsgType.ObjectSpawn或是 MsgType.ObjectSpawnSc

8、ene(这种一般是服务场景变换后自动调用),并传递 上面的netID.3、当客户端接受到ObjectSpawn消息,会在注册的prefab里查找,查找 到后Instantiate个网络物体,当接受到U ObjectSpawnScene时,会在场景里 查找这个网络物体,然后都注册到ClientScene里的NetworkScene的网络物 体列表中,并更新netID与服务器的一样。更新如isClent为true等信息。学IT技能上我学院网我们手动spawn 一个物体时,调用的是ObjectSpawn消息,客户端接到 这个消息处理得到一个assetID ,我们要根据prefabe实例一个新对象,只

9、有客 户端注册了相应的prefabe信息才能根据对应的assetID找到prefabe.题2 : Networkidentity的netID表示什么,那个时候分配。当服务器与客户端的netID相同,表示他们是同一物体,相应标示如 SyncVar,服务器变了,对应客户端上相同的netID的网络物体,更新成服务器 上的数据,Rpc,Commandg 一般也是相同的netID之间调用。分配一般发生在服务器spawn 一个网络物体时,网络物体调用 OnStartServer 时发生产生 netID。在客户端接受相应的ObjectSpawn消息,会把服务器上的对应物体的 netID传递过来,产生新的网络

10、物体并赋这个netID。问题3 : NetworkIdentity的sceneID是什么,在场景里已经有 NetworkIdentity组件的物体是如何在客户端与服务器联系的。当网络物体并不是spawn产生在服务器与客户端,而是在服务器与客户端 场景本身就有时,我们也需要在服务器与客户端之间建立联系,这种物体会有一 个sceneID来标示,这种模型一般是服务器场景变换完成后,NetworkServer 调用spawnObjects会把这种网络物体与所有客户端同步,当spawn完成后过 后,相应客户端会产生一个和服务端相同的netID。学IT技能上我学院网问题4 :服务器场景切换后,各个Netw

11、orkidentity组件的物体如何与客户 端联系。如下顺序因为有异步操作,并不能确定,如下顺序只是一般可能的顺序:1、服务器异步调用场景发送给所有客户端开始切换场景。MsgType.Scene2、客户端接受MsgType.Scene,开始切换场景。3、服务器场景完成,会查找所有的网络物体,然后spawn这些网络物体, 这样各个网络物体通过相同的netID联系起来。4、客户端场景完成后,再次调用OnClientConnect,一般来说,不执行任何 操作。问题5 :客户端为什么要网络物体的权限,它有了权限能做什么。一般来说,当spawn某个服务器上的网络物体后,服务器有它的权限,客 户端并不能更

12、改这个网络物体,或是说更改这个网络物体相应的属性后并不能同 步到服务器和别的客户端上,只是本机上能看到改变。那么我如果需要能改变这个网络物体上的状态,并能同步到所有别的客户端 上,我们需要拥有这个网络物体的权限,因为这样才能在本机上发送Command 命令,才能告诉服务器我改变了状态,服务器也才能告诉所有客户端这个网络物 体改变了状态。学IT技能上我学院网其中本地player在创建时,当前客户端对本地player有权限。客户端上有 权限的网络物体上的SyncVar改变后,也并不会能同步到服务器,服务器根本 没有注册UpdateVars消息,这种还是需要客户端自己调用Command命令。问题6

13、: UNet常见的封装状态同步处理有那些,其中NetworkTransform 与NetworkAnimator分别怎样通信,如果是客户端权限的网络物体又是怎么通 信的了。UNet常见的封装状态同步状态方法有二种:1、通过ClientRpc与Command是封装发送消息。客户端与服务端一方 调用,然后序列化相应的参数,然后到服务器与客户端反序列化参数执行。2、网络内置的序列化与反序列化,序列化服务器的状态,然后客户端反序 列化相应的值,如SyncVar通过相应的OnSerialize,OnDeserialize.这种只能同 步服务器到客户端。这二种本质都是客户端与服务器互相发送MsgType消

14、息,对应的服务器与 客户端注册相应消息处理。NetworkAnimator服务器上的动画改变,会发消息 通知所有客户端相应状态改变了,如Rpc。NetworkTransform服务器通过 OnSerialize序列化相应的值,然后客户端反序列化相应的值。如果客户端有对应NetworkTransform与NetworkAnimator网络物体的 权限。NetworkAnimator相应客户端提交状态到服务器上,然后分发到所有客学IT技能上我学院网户端,相当于调用了 Command,并在Command里调用了 Rpc方法。 NetworkTransform相应客户端发送消息到服务器上,服务器更新相

15、应位置, 方向。然后通过反序列化到所有客户端。所以如果客户端有授权,那么NetworkAnimator与NetworkTransform 在服务器或是有授权的客户端的状态改变都能更新到所有客户端,注意这二个组 件对 localPlayerAuthority 的处理不同,在 NetworkTransform 中, localPlayerAuthority为false时客户端不能更新到所有客户端,在 NetworkAnimator 中,localPlayerAuthority 为 true 时,服务器不能更新到U 客户端上。其中注意SyncVar特性,就算客户端授权,客户端改变后,也不会同步到 别的机器上。所以如果我们自己设计类似的网络组件,需要考虑客户端授权的相应处理, 就是差不多添加一个Command命令。问题7 :客户端授权与本地player授权有什么区别。一般物体的权限都在服务器上,如果要对网络物体授权给客户端,一般通过 SpawnWithClientAuthority实现,这样在相应客户端上的hasAuthority为 true,其中相应的 playerControllerID 为-1。学IT技能上我学院网而本地player授权

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号