Unity5.1为开发者发布全新的多玩家在线工具、技术和服务。该技术的内部项目名称为 UNET,全称为 Unity Networking。我近期的工作便是研究并使用unet,将自己的研究结果在这里记录一下,如有纰漏,请大家多多指正。我主要记述的不是很具体的用法而是一些我遇到的问题,用法在网上也能查到很多。
Unet针对不同用户的使用有高级和低级API两种--用Unity制作多玩家游戏的用户,这类用户应该从NetworkManager或者高级API开始。
搭建网络架构或制作高级的多玩家游戏的用户,这类用户应该从网络传输层低级API开始。
下面从高级API(HLAPI)开始介绍,使用高级API可以实现:
- 通过Network Manager控制游戏的网络状态
- 操作客户端主持的游戏,主持游戏的客户端同时也是一个玩家
- 使用一个通用的序列化器序列化数据
- 发送和接收网络消息
- 从客户端向服务器发送网络命令
- 在服务器上远程调用客户端提供的过程(RPC)
- 从服务器向客户端发送网络事件
关于Unet的介绍网上有很多,大家可以自行查找。
首先,Unet提供了网络连接以及管理的组件:
网络管理器(NetworkManager)可以作为控制多人游戏的核心组件。在场景中创建一个空的游戏对象或挑选一个方便管理器对象。从Network/NetworkManager菜单项里选择添加NetworkManager组件。新添加的NetworkManager应如图所示:
在编辑器中的NetworkManager的的inspector 面板上,有允许您配置和控制与网络相关的很多东西。
NetworkManagerHUD 是与NetworkManager相关的的另一个组件。游戏运行控制网络状态时,它给你一个简单的用户界面。用来调试或者实验都可以,但不能用作游戏最终的 ui 设计。NetworkManagerHUD 看起来像:
真正的游戏用户需要自己设置正确的UI ,用于控制游戏状态和允许玩家选择什么样的游戏 。用户设置自己的UI时,脚本需要继承NetworkManager,使用里面的StartHost(),StartClient()来开启伺服器和客户端。并且可以重写方法来检测连接或者实现相应功能,eg:OnClientConnect,OnStartHost等。
之后便可以使用一系列组件实现自己想要的功能了:
unity自带的组件有上述这些,根据名字也可以大致推测出可以实现什么功能,下面简要介绍一下:
--Animator:动画同步
--Identity:网络标识组件(带有Identity的物体只有网络开启后才会显示出来)
--LobbyManager:游戏大厅
--LobbyPlayer:玩家控制
--Manager:网络管理器
--ManagerHUD:默认UI
--StartPosition:游戏开始玩家所处的位置
--Tranform:物体位移等的同步控制(挂载在需要同步物体的最小父物体上即可)
这一章到这里,下一章我主要记述我所遇到的问题。