创建会话

Note: The Multiplayer Services SDK uses sessions to manage groups of players. Sessions relies internally on different combinations of Unity Gaming Services such Relay, Lobby, Matchmaker and Game Server Hosting, and thus contributes to the billing of those services.

要开始多人游戏,主机必须创建 会话,其他玩家加入会话以参与游戏。 本页概述了创建会话时脚本中必须包含的内容。 创建会话时请考虑以下因素

  • 会话选项属性
  • 网络连接类型

Note: To access the API for the Multiplayer Services SDK, import the SDK's namespace in your script:

using Unity.Services.Multiplayer;

CreateOrJoinSessionAsync 方法

CreateOrJoinSessionAsync 方法将加入具有给定 ID 的会话,或者如果该会话不存在,则创建该会话。 对于客户端之间可能发生竞争条件的情况,这很方便,您不确定哪个客户端将创建会话。

var session = await MultiplayerService.Instance.CreateOrJoinSessionAsync(sessionId, options)

会话选项属性

会话选项决定会话的各种属性,例如最大玩家人数或会话是否受密码保护。

有关选项的完整列表,请参阅 类 SessionOptions

网络连接类型

另一个需要考虑的因素是玩家加入会话的网络连接类型。 玩家可以通过直接网络连接加入,也可以通过 中继 加入。 使用中继进行网络连接可提供最大的兼容性,并且是通过互联网进行点对点游戏推荐的最佳实践。

有关更多信息,请参阅 类 SessionOptions > 方法

示例

请考虑以下示例代码,您可能将其添加到脚本中以创建会话。

async void StartSessionAsHost()
{
    var options = new SessionOptions
    {
      MaxPlayers = 2
    }.WithRelayNetwork();
    var session = await MultiplayerService.Instance.CreateSessionAsync(options);
    Debug.Log($"Session {session.Id} created! Join code: {session.Code}");
}

在此代码中

  • 变量 MaxPlayers 设置会话中允许的最大玩家人数,包括主机。 在此示例中,最大玩家人数为两人。
  • SessionOptions 类中的变量选项可以确定其他会话选项,例如会话的名称以及会话是否受密码保护。
  • 使用 WithRelayNetwork() 将会话配置为使用中继网络而不是直接连接(换句话说,使用固定 IP 地址和端口)。 这是通过互联网进行点对点连接推荐的最佳实践。 请参阅 中继
  • 代码行 var session = await MultiplayerService.Instance.CreateSessionAsync(options); 创建会话,并将玩家设为主机。
  • 最后一行 Debug.Log($"Session {session.Id} created! Join code: {session.Code}"); 将会话 ID 和加入代码显示在 Unity 编辑器的控制台中。 然后,主机会将此加入代码与其他玩家共享。 或者,您可以创建变量来获取加入代码,例如 var joinCode = session.Code; 并使用该变量代替。

高级用法:指定自定义网络处理程序

可以指定一个实现 INetworkHandler 的自定义网络处理程序,覆盖与 Netcode for Game Objects 和 Netcode for Entities 的默认集成。

var options = new SessionOptions { MaxPlayers = 2 }
        .WithRelayNetwork()
        .WithNetworkHandler(new CustomEntitiesNetworkHandler());