创建大厅

创建新的大厅时,玩家可以通过创建调用设置以下属性:

  • 大厅名称(必需
  • 大厅可见性(公开还是私人)
  • 大厅大小(最大玩家人数)
    • 在代码中,这被称为最大玩家数
  • 密码
    • 加入大厅时所需输入的 8 至 64 位字符密码。
  • 初始自定义大厅数据
    • 这可以包括任意数据,例如地图 ID 和游戏模式。
    • 可以为字符串或数值形式的大厅数据建立索引,以便在查询时基于这些索引进行筛选和排序。
  • 初始(厅主)玩家数据
    • 例如,玩家显示名称、技能和角色。

注意:创建大厅时,玩家会自动成为厅主玩家。

创建公开大厅

公开大厅无需输入大厅代码即可加入,并会显示在查询结果中,供任何玩家加入。

以下代码示例展示了如何创建公开大厅:

C#

string lobbyName = "new lobby";
int maxPlayers = 4;
CreateLobbyOptions options = new CreateLobbyOptions();
options.IsPrivate = false;

Lobby lobby = await LobbyService.Instance.CreateLobbyAsync(lobbyName, maxPlayers, options);

创建私人大厅

私人大厅永远不会显示在查询结果中,新玩家需要手动输入大厅代码或 ID 才能加入。

以下代码示例展示了如何创建私人大厅:

C#

string lobbyName = "new lobby";
int maxPlayers = 4;
CreateLobbyOptions options = new CreateLobbyOptions();
options.IsPrivate = true;

Lobby lobby = await LobbyService.Instance.CreateLobbyAsync(lobbyName, maxPlayers, options);

创建包含标准非索引数据的大厅

创建请求和后续的更新请求都可以包括大厅数据。

以下代码示例展示了如何创建包含标准非索引数据的大厅:

C#

string lobbyName = "new lobby";
int maxPlayers = 4;
CreateLobbyOptions options = new CreateLobbyOptions();
options.Data = new Dictionary<string, DataObject>()
{
    {
        "ExamplePublicLobbyData", new DataObject(
            visibility: DataObject.VisibilityOptions.Public, // Visible publicly.
            value: "ExamplePublicLobbyData")
    },
};

Lobby lobby = await LobbyService.Instance.CreateLobbyAsync(lobbyName, maxPlayers, options);

创建包含索引字符串数据的大厅

以下代码示例展示了如何创建包含索引字符串数据的大厅:

C#

string lobbyName = "new lobby";
int maxPlayers = 4;
CreateLobbyOptions options = new CreateLobbyOptions();
options.Data = new Dictionary<string, DataObject>()
{
    {
        "GameMode", new DataObject(
            visibility: DataObject.VisibilityOptions.Public, // Visible publicly.
            value: "Conquest",
            index: DataObject.IndexOptions.S1)
    },
};

Lobby lobby = await LobbyService.Instance.CreateLobbyAsync(lobbyName, maxPlayers, options);

创建包含索引数值数据的大厅

以下代码示例展示了如何创建包含索引数值数据的大厅:

C#

string lobbyName = "new lobby";
int maxPlayers = 4;
CreateLobbyOptions options = new CreateLobbyOptions();
options.Data = new Dictionary<string, DataObject>()
{
    {
        "MinimumSkillLevel", new DataObject(
            visibility: DataObject.VisibilityOptions.Public, // Visible publicly.
            value: "25",
            index: DataObject.IndexOptions.N1)
    },
};

Lobby lobby = await LobbyService.Instance.CreateLobbyAsync(lobbyName, maxPlayers, options);

创建包含厅主玩家数据的大厅

与大厅数据一样,厅主玩家数据也可以包含在创建请求中,而不必通过单独的更新请求来进行添加。

以下代码示例展示了如何创建包含厅主玩家数据的大厅:

C#

string lobbyName = "new lobby";
int maxPlayers = 4;
CreateLobbyOptions options = new CreateLobbyOptions();
// Ensure you sign-in before calling Authentication Instance.
// See IAuthenticationService interface.
options.Player = new Player(
    id: AuthenticationService.Instance.PlayerId,
    data: new Dictionary<string, PlayerDataObject>()
    {
        {
            "ExampleMemberPlayerData", new PlayerDataObject(
                visibility: PlayerDataObject.VisibilityOptions.Member, // Visible only to members of the lobby.
                value: "ExampleMemberPlayerData")
        }
    });

Lobby lobby = await LobbyService.Instance.CreateLobbyAsync(lobbyName, maxPlayers, options);

活动大厅与不活动大厅

如果大厅在过去 30 秒内没有更新或发送心跳请求,系统会将大厅标记为不活动。您可以配置此超时期限。处于不活动状态的公开大厅不会显示在查询结果中,并且系统会自动删除处于不活动状态的公开大厅和私人大厅。通过更新或发送心跳请求,可以重新激活处于不活动状态的大厅。

由于每 30 秒只允许发送 5 个心跳请求,因此用户同时只能托管 5 个大厅。有关更多信息,请参阅针对大厅进行心跳检测