Unity 技术干货 | Unity Networking
在 Unity 5.1 版本中,为开发者提供了全新的多玩家在线工具 Unity Networking。借助这项技术,用户能够实现通讯层的数据传输、低阶的 NAT 支持以及高阶的游戏配对。Unity 期望开发者能够打造出支持任意玩家数量的多人在线游戏。
多人在线的实现方法
多人在线功能的实现可分为底层和上层两个部分。
底层(通讯层)
底层即通讯层,通过 NetworkTransport 类来实现。这一层在 Unity 引擎中使用 C++ 编写,其主要目的是优化 Socket 接口的通讯传输。
上层
在通讯层之上,提供了使用 C# 编写、以 DLL 文件形式存在的高级 API(high level API)。这些文件已经开源,用户只需遵守 MIT/X11 协议,就可以根据自身需求对代码进行修改和替换。
两个抽象层的使用介绍
可扩展 DLL 文件中的内容可看作两部分:高级(high level)和低级(low level)。
- 低级层面(low level):当使用
NetworkClient和NetworkServer类时,用户可以在低级层面手动建立连接。 - 高级层面(high level):使用
NetworkManager和NetworkLobbyManager则可以实现高级层面的访问。将NetworkClient等组件添加到游戏对象后,在该游戏对象的 Inspector 窗口中可获得相应的链接选项以及内置的 HUD 组件。当然,用户也可以对这些类进行修改和扩展,以实现自定义的行为和功能。
上述内容均基于 C/S 架构以及服务器授权模式实现。当开发者想要更好地了解和使用通讯层,或者实现自定义的高级 API 时,这些类是绝佳的参考资料。
注意事项
提供的资源包含三个 VS 工程文件,分别针对真机、编辑器以及编辑器运行。“编辑器运行时”在编辑器进入 Playmode 时执行。引擎内部的 Update 方法必须能够找到 NetworkIdentity.UNetUpdate() 方法,否则该 Update 方法将无法正常运行。
在编辑器中,会实时进行一些代码编译,这个工具叫做 UNetWeaver,目前正在考虑将这部分内容开源。该工具会将 NetworkBehavior 编译成一系列的序列化代码、Command/ClientRPC 程序以及各种查询列表。在进行扩展时,必须注意保持名称一致(如 SyncVar、Command 等),以确保相应的功能能够正常使用。