19 Unity网络基础(NetWork)
Unity基本网络知识
网络的作用: 信息交互 资源分布 分布式处理
网络通讯协议: 七层协议:
IP地址:
每一个可以连接网络的设备,都有自己的一个独一无二的IP地址
NAT地址转换:
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。 这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
端口:每一个端口对应一个服务 只有端口号保持一致,才能从服务器访问到客户端,或者客户端访问服务器
网络游戏则是有多个客户端访问一个服务器,从服务器在传到各个客户端上,从而使得每个客户端都可以看到其他几个客户端的部分显示.
Unity网络框架解析 unity的网络框架的建立,主要是使用Unity内封装的网络API(HLAPI),其主要功能如下:
网络状态管理 [创建服务器,主机,客户端], 状态同步, 远程过程调用 ,互联网服务 [中继服务器,游戏大厅,匹配比赛] .
Unity网络服务器
使用Unity搭建网络服务器,主要通过NetworkServer类实现
NetworkServer类负责创建服务器监听接口,管理客户端的连接,它也负责处理游戏相关的一些特性:玩家管理,监听,卵生对象和消息处理。
Server方法:
Listen: 根据指定端口开启服务器
RegisterHandler:注册回调函数
Spawn:在所有已准备的客户端上实例化物体
SpawnWithClientAuthority:同上,并且设置客户端权限
Destroy:在所有客户端上删除物体
AddPlayerForConnection:将所有卵生的物体与客户端建立关系
Server属性
active: 检查服务器是否开启
connections:当前所有连接的客户端列表
handlers:以字典的形式返回服务器注册的所有回调方法
listenPort:服务器监听端口
localClientActive:在服务器上的客户端,即如果当前客户端为主机返回为true
maxDelay:连接之间发送数据的组大延迟
创建服务器:
void InitServerAction () { //1、监听端口并开启服务器 NetworkServer.Listen (34567); //2、注册响应事件,第一个参数:表示服务器为哪种类型事件注册监听, // 第二个参数表示,如果监听到该事件发生的自动回调方法 // 这里监听的是连接服务器事件,如果有客户端连接服务器,自动 // 回调HasClientConnect方法 NetworkServer.RegisterHandler (MsgType.Connect, HasClientConnect); //3、注册事件,如果有客户端连接后,发出添加游戏对象的指令 NetworkServer.RegisterHandler (MsgType.AddPlayer, AddPlayer); }
Unity网络客户端(NetworkClient)
该类对象负责连接服务器,并与服务器通信(即受到服务器消息和发送消息给服务器)
Client方法
Connect:根据指定IP和Port连接服务器
RegisterHandler:注册回调函数
Client属性
网络卵生对象(通过服务器在客户端创建网络游戏对象)
网络中,所有的网络对象都是由服务器产生
在客户端玩家对象生成步骤:客户端发请求,服务器接收请求后实例化客户端对象
卵生对象生成步骤:
新建预制体,添加NetWorkidentity组件
客户端调用ClientScene.Ready()方法告知服务器已经准备好
客户端调用ClientScene.RegisterPrefab()注册网络预制体
客户端调用ClientScene.AddPlayer()方法的回调告诉服务器产生对象
服务器RegisterHandler->MsgType.AddPlayer的回调Addplayer
服务器在AddPlayer方法实例化物体,调用Spawn方法卵生
Unity状态同步
同步游戏物体的位置:NetworkTransform
NetworkBehaviour 组建是一个特殊的组件,它依赖NetworkIdentity组件,用来实现RPC技术和状态同步属性。我们想实现网络物体的控制,必须继承自NetworkBehaviour
RPC技术:
网络系统可以实现客户端和服务端的通信,我们将这种通信称之为:远程调用(Remote Procedure Calls),即RPC.RPC框架可以方便实现方法调用,使用户不需要关心如何编码连接和传输.
Unity中的RPC技术有两种:
客户端调用服务器方法(Command)
服务器调用客户端方法(ClientRPC)
动画同步
(1)首先这个玩家向服务器发起一个客户端发起在服务端执行方法的命令,就是Command
(2)这个Command修饰方法体是由服务器调用一个由服务器发起,在各个客户端执行方法的命令,即 ClientRpc修饰的方法
(3)在这个ClientRpc修饰的方法体中设置要进行同步的Trigger动画的动画设置
(4)要同步动画的游戏对象身上要添加NetworkAnimator组件
(1)Command:客户端调用,服务器执行,这样客户端调用的参数必需要UNet可以序列化,这样服务器在执行时才能把参数反序列化。需要注意,在客户端需要有权限的NetworkIdentity组件才能调用Command命令。
(2)ClientRpc:服务端调用,客户端执行,同上,服务端的参数序列化到客户端执行,一般来说,服务端会找到上面的NetworkIdentity组件,确定那些客户端在监视这个NetworkIdentity,Rpc命令会发送给所有的监视客户端。