Unity Unet网络框架说明手册

一. Unet基本介绍。
Unet全称为 Unity Networking,为开发者提供开发多玩家在线的开发工具和模块,使多人在线游戏开发的网络部分变得更加简单。
其特点是:
1. 基于 UDP 的高性能传输层支持所有的游戏类型
2. 底层 API (LLAPI) 通过类似套接字的接口提供全面控制
3. 高层 API (HLAPI) 提供简单、安全的客户端/服务器网络模型
4. 匹配服务提供基本功能,让一个用户创建多人模式并允许他人加入
5. 中继服务器解决连接问题,使玩家在使用防火墙的情况能相互连接

Unet的基本结构并不像传统的C/S架构,而是每一个客户端都可以充当充当服务器,即客户端既可以是单纯的客户端,也可以同时兼顾客户端与服务器的双重身份。客户端将重要的操作放在服务器上去执行,并把执行结果广播同步至每个客户端。而服务器也可以远程调用客户端提供的过程。

二. Unet主要类
1.NetworkIdentity:网络物体最基本的组件,客户端与服务器确认是否是一个物体(netID),也用来表示各个状态,如是否是服务器,是否是客户端,是否有权限,是否是本地玩家等。
例子:A是Host(又是服务器,又是客户端),B是一个Client,A与B分别有一个玩家PlayA与PlayB.在机器A上,playA与playB isServer为true,isClent为true,其中playA有权限,是本地玩家,B没权限,也不是本地玩家。在机器B上,playA与playB isServer为false,isClent为true,其中playB有权限,是本地玩家,A没权限,也不是本地玩家。A与B上的PlayA的netID相同,A与B上的PlayB的netID也相同,其中netID用来表示他们是同一网络物体在不同的机器上。

2.NetworkConnection: 定义一个客户端与服务器的连接,包含当前客户端监视那些服务器上的网络物体,以及封装发送和接收到服务器的消息。
例如:网络物体上的监视者就是一个或多个NetworkConnection,用来表示一个或多个客户端对这个网络物体保持监视,那么当这个网络物体在服务器上更新后,会自动更新对所有监视者的对应的网络物体。

3.NetworkClient:主要持有当前NetworkConnection对象与所有NetworkClient列表的静态对象,处理一些默认客户端的消息。

4.NetworkScene: 1Server与Client需要维护一个网络物体列表,Server可以遍历所有网络物体发送消息等,并且维持Server与Client上的网络物体保持同步,并且客户端记录需要注册的prefab列表.其中NetworkServer与ClientScene都包含一个NetworkScene对象,引用网络物体列表。

5.NetworkServer:主要持有一个NetworkScene并且做一些只有在服务器上才能对网络服务做的事,如spawn, destory等。以及维护所有客户端连接。

6.ClientScene:主要持有一个静态NetworkScene对象,用于注册网络物体的prefab列表,以及客户端场景上已经有的网络物体列表,处理SyncVar,Rpc,SyncEvent特性等,还有以及ObjectSpawn,objectDestroy,objectHide消息等。

二. Unet主要属性
1.Spawn:把服务器上的GameObject,根据NetworkIdentity组件找到对应监视连接,在监视连接里生成相应的GameObject.

2.Command:客户端调用,服务器执行,这样客户端调用的参数必需要UNet可以序列化,这样服务器在执行时才能把参数反序列化。需要注意,在客户端需要有权限的NetworkIdentity组件才能调用Command命令。

3.ClientRpc:服务端调用,客户端执行,同上,服务端的参数序列化到客户端执行,一般来说,服务端会找到上面的NetworkIdentity组件,确定那些客户端在监视这个NetworkIdentity,Rpc命令会发送给所有的监视客户端。

4.Server/ServerCallback:只在服务器端运行,Callback是Unity内部函数。

5.Client/ClientCallback:同上,只在客户端运行,Callback是Unity内部函数。

6.SyncVar:服务器的值能自动同步到客户端,保持客户端的值与服务器一样。客户端值改变并不会影响服务器的值。
注意:这些属性分为两种调用方式(服务器调用,客户端执行 与 客户端调用,服务器执行),其中Spawn,ClientRpc,SyncVar都是服务器调用,客户端得到相应消息,执行相应方法。而Command等为客户端调用,服务器检测到相应消息后执行

三. Unet主要组件
Unet的组件分为两大类,一类为挂载在场景中不会消失的一个物体上,进行管理操作的。另外一类为挂载在Prefab上的组件,表面Prefab上的各种属性等

(一) 管理组件
1.NetworkManager:实现联网的基本功能,添加要同步的Prefab,

其中,Network Inof是对网络连接的各种属性进行设置。
而Spawn Info主要是在场景中要生成的物体进行设置:
·PlayerPrefab为客户端加入时自动生成的Prefab,可挂一个空的GameObject到场景中再去添加。

·PlayerSpawnMethod为Prefab的位置生成方法,两个选项(Random随机生成/ RoundRobin轮询,在指定的地点轮流生成)。使用这个方法首先要有指定的位置(NetworkStartPosition) 。

·RegisteredSpawnablePrefabs=>在这个数组中放置的Prefab是需要在网络中生成的,加入到这个数组中,才可以在网络中同步生成。

2.NetworkManagerHUD:一个测试用的链接UI界面,可以在测试时使用,但是在真正的游戏中不会保留。

(二) Prefab组件
1.NetworkIdentity:表明这个预设体是一个网络对象,可以设置这个预设体是在客户端生成还是只在服务器端生成,并且想要在网络上进行同步的物体都必须具有这个组件。

·ServerOnly:只在服务器端生成,不会在客户端批量生成
·LocalPlayerAuthority:如果这个对象是由拥有它的客户端控制的,本地玩家对象在这个客户端拥有它的权限,这个属性常被其他组件使用例如Networktransfrom。

2.NetworkTransform:同步对象在所有客户端上的Transform属性,可以选择同步Rigidbody属性。

·NetworkSendRate(seconds):同步的频率,0代表在生成是同步一次
·TransformSyncMode:同步的组件 ,有4个选项
SyncNone:不同步其他组件
SyncTransform:同步Transform组件,就算不选,也会同步
SyncRigidbody2D:同步Rigidbody2D组件,
SyncRigidbody3D:同步Rigidbody3D组件

3.NetworkTransformChild:想对同步对象中的子对象进行一个Transform属性的同步,可以将该组件挂载在子对象上。

4.NetworkStartPosition:将这个对象的位置作为Player生成的位置

四. Unet底层API
TransPort Layer API:能够发送和接受消息闭关表示为数组的字节,还提供了大量不同的“服务端质量”,以适应不同的场景,支持基础的网络通信服务。简单说:为一种更加具有自由的网络通信服务。
其特点为:
• 优化基于 UDP 协议。
• Multi-channel design to avoid head-of-line blocking issues 多通道设计,以避免头的线阻塞问题
• 每个通道支持各种levels 的服务质量 (QoS) 。
• 灵活的网络拓扑结构,支持对等 或 客户机-服务器体系结构。
其有两种协议
1. 通用通信UDP(典型工作流程)
(1) 初始化网络传输层

// 不带参数初始化 
NetworkTransport.Init(); 
// 设置最大数据包为500 
GlobalConfig globalconfig = new GlobalConfig();
globalconfig.MaxPacketSize = 500;
NetworkTransport.Init(globalconfig);

(2) 配置拓扑网络

ConnectionConfig config = new ConnectionConfig();
// QosType.Re
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值