Unity 技术干货 | Unity Networking

2015年11月25日 11:02 0 点赞 0 评论 更新于 2025-11-21 19:28

在 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):当使用 NetworkClientNetworkServer 类时,用户可以在低级层面手动建立连接。
  • 高级层面(high level):使用 NetworkManagerNetworkLobbyManager 则可以实现高级层面的访问。将 NetworkClient 等组件添加到游戏对象后,在该游戏对象的 Inspector 窗口中可获得相应的链接选项以及内置的 HUD 组件。当然,用户也可以对这些类进行修改和扩展,以实现自定义的行为和功能。

上述内容均基于 C/S 架构以及服务器授权模式实现。当开发者想要更好地了解和使用通讯层,或者实现自定义的高级 API 时,这些类是绝佳的参考资料。

注意事项

提供的资源包含三个 VS 工程文件,分别针对真机、编辑器以及编辑器运行。“编辑器运行时”在编辑器进入 Playmode 时执行。引擎内部的 Update 方法必须能够找到 NetworkIdentity.UNetUpdate() 方法,否则该 Update 方法将无法正常运行。

在编辑器中,会实时进行一些代码编译,这个工具叫做 UNetWeaver,目前正在考虑将这部分内容开源。该工具会将 NetworkBehavior 编译成一系列的序列化代码、Command/ClientRPC 程序以及各种查询列表。在进行扩展时,必须注意保持名称一致(如 SyncVarCommand 等),以确保相应的功能能够正常使用。

作者信息

洞悉

洞悉

共发布了 3994 篇文章