Unity 中的网络元素

Unity 的本地网络连接支持前一页所讨论的内容。盒外支持服务器创建和客户端连接、共享连接的客户端之间的数据、确定哪些玩家控制哪些对象以及穿过网络配置变化。本页面将带领您了解 Unity 对这些网络实践的具体实行。

创建服务器

在开始玩网络游戏前,您必须确定进行通信的计算机。为此,您需要创建一个服务器。服务器可以是也在运行该游戏的一台设备,也可以是不参与该游戏的一台专用设备。要创建服务器,只需从脚本调用 Network.InitializeServer()。当您想要连接一个作为客户端的现有服务器时,您可以调用 Network.Connect()

通常情况下,您将发现通过整个网络分类来熟悉是非常有用的。

使用网络视图通信

网络视图 (Network Views) 是通过网络发送数据的组件。网络视图 (Network Views) 使您的“游戏对象”(GameObject) 能够通过使用 RPC 调用或“状态同步”(State Synchronization) 发送数据。您使用网络视图 (Network Views) 的方式将决定您游戏的网络行为的工作方式。“网络视图”(Network Views) 只有少许选项,但是这些选项对您的网络游戏非常重要。

关于使用网络视图 (Network Views) 的更多详细信息,请参阅网络视图指南页面组件参考页面

远程过程调用(Remote Procedure Call)

远程过程调用 (RPC) 是在脚本中声明的函数,这些脚本被附加到包含网络视图 (Network View) 的游戏对象 (GameObject) 上。网络视图 (Network View) 必须指向包含 RPC 函数的脚本。然后才可以从游戏对象 (GameObject) 范围内的任何脚本中调用 RPC 函数。

有关在 Unity 中使用 RPC 函数的更多详细信息,请参阅 RPC 详细信息页面

状态同步(State Synchronization)

状态同步 (State Synchronization) 是在所有游戏客户端上持续共享数据。通过这种方法,可以在所有客户端上同步玩家的位置,所以看起来是由本地控制的,但实际上数据是由网络传送的。要使状态在某个游戏对象 (GameObject) 中同步,您只需将网络视图 (NetworkView) 添加到该对象并告诉其观察的内容。然后观察的数据在游戏中所有客户端上同步。

有关在 Unity 中使用状态同步 (State Synchronization) 的更多详细信息,请参阅状态同步页面

Network.Instantiate()

Network.Instantiate() 可使您轻松自然地在所有客户端上实例化预设。本质上这是一个 Instantiate() 调用,但是它在所有客户端上执行实例化。

Network.Instantiate 实际上只是一个在所有客户端上(或在本地)执行的缓冲 RPC 调用。它分配 NetworkViewID 并将其指派给实例化的预设,从而确保了其在所有客户端上正确同步。

有关更多详细信息,请参阅网络实例化页面。

NetworkLevelLoad()

处理共享数据、客户端播放器的状态和加载等级也许会让您感到无所适从。但在网络等级加载页面包含一个有用的示例以管理此任务

主服务器

主服务器有助于匹配游戏。当您启动一台连接到主服务器的服务器时,它将提供 一张所有活跃服务器的列表。

主服务器 (Master Server 是服务器和客户端相互接触的场所,其中服务器是列出的,而兼容的客户端可以连接到运行中的游戏。这可以让所有参与各方不需要调整 IP 地址。它甚至可以帮助用户无需设置路由器就可以创建游戏,而在一般情况下,这是需要的。它可以帮助客户端绕过服务器的防火墙进入私人的 IP 地址,而通常情况下是不能通过公共网络访问的。通过服务商的帮助可加快连接的建立,从而完成此功能。

有关更多详细信息,请参阅主服务器页面

最小化带宽

使用最少量的宽带使您的游戏正常运行非常重要。您可以随意使用多种方法发送数据,运用不同的技术决定发送什么何时发送以及其他技巧供您使用。

有关减少带宽使用的提示和技巧的详细信息,请参阅最小化带宽页面

调试网络游戏

Unity 有几种工具可以帮助您调试网络游戏。

  1. 网络管理器可以用于记录所有输入和输出的网络流量。
  2. 有效地利用“检视器”(Inspector) 和“层级视图”(Hierarchy View) 可以追踪对象创建和检视视图 ID 等。
  3. 3您可以在同一台设备上启动两次 Unity 并在每个 Unity 中打开不同的工程。在 Windows 中 这可以通过只启动另一个 Unity 实例并从工程向导中打开工程来完成。在 Mac OS X 中,可以从终端打开多个 Unity 实例,并且可以指定 -projectPath 参数:
    /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath "/Users/MyUser/MyProjectFolder/"
    /Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath "/Users/MyUser/MyOtherProjectFolder/"

当调试网络时,请确保使播放器在后台运行,因为例如,如果您同时运行两个实例,其中一个实例则没有焦点。这将中断网络循环并导致不良后果。您可以在编辑器中的“编辑”(Edit) ->“工程设置”(Project Settings) ->“播放器”(Player) 中或者通过 Application.runInBackground 启用后台运行功能。

Page last updated: 2013-07-01