队伍

注意:队伍功能使用 Unity Lobby 服务将玩家组队。因此,Lobby 服务是使用队伍功能的一项要求。

队伍功能展示了如何在游戏中营造组队体验。队伍是由玩家组成的玩家团体,它将在整个游戏会话期间(从游戏启动到游戏结束)持续存在。队伍会在多个游戏状态下持续存在,例如大厅、配对和游戏主线。与好友列表(一种玩家的永久分组)不同,队伍仅在单个游戏会话的持续时间内存在。

继续之前,请下载并安装 Unity Hub 和受支持版本的 Unity 编辑器。队伍功能支持以下 Unity 编辑器版本:

  • Unity 2020.3 LTS 或更高版本

要求

开始使用队伍功能之前,您必须满足以下要求:

  • 安装 Unity Lobby SDK
  • 您的 Unity 项目已加入 Lobby 服务。
  • TextMesh Pro 必要资源。
    • 在编辑器中,转到 Window > Textmesh Pro > Import TMP Essential Resources(导入 TMP 必要资源)

工作流程概述

使用队伍功能时,典型的队伍成员旅程如下:

  1. 玩家 A 创建一个队伍
  2. 玩家 A 向玩家 B 发送邀请代码
  3. 玩家 B 使用该代码加入队伍
  4. 玩家 A 和 B 都在队伍中,然后他们开始第 1 局游戏
  5. 第 1 局游戏结束,队伍仍然存在,以便玩家 A 和 B 可以再次一起进行第 2 局游戏

概念

队伍

队伍是由玩家组成的玩家团体,它将在整个游戏会话期间(从游戏启动到游戏结束)持续存在。

队长

队长是指队伍的主人。他们可以管理队伍,还可以添加和踢出玩家。

队员

队员是指队伍的成员。队员可以通过发送邀请代码来添加其他玩家。

管理队伍

您可以从 LobbyManager 使用以下 Lobby 代码示例来执行队伍功能相关操作:

创建队伍

async void CreateLobby()
        {
            try
            {
                var partyLobbyOptions = new CreateLobbyOptions()
                {
                    IsPrivate = true,
                    Player = m_LocalPlayer
                };
                var partyLobbyName = $"{k_LobbyNamePrefix}_{m_LocalPlayer.Id}";
                m_PartyLobby = await LobbyService.Instance.CreateLobbyAsync(partyLobbyName,
                    m_MaxPartyMembers,
                    partyLobbyOptions);
                await OnJoinedParty(m_PartyLobby);
            }
            catch (LobbyServiceException e)
            {
                PopUpLobbyError(e);
            }
        }

将另一名玩家指定为队长(作为队长)

async Task TrySetHost(string playerId)
        {
            if (!m_LocalPlayer.IsHost)
                return;
            try
            {
                var setHostOptions = new UpdateLobbyOptions()
                {
                    HostId = playerId
                };
                await LobbyService.Instance.UpdateLobbyAsync(m_PartyLobby.Id, setHostOptions);
            }
            catch (LobbyServiceException e)
            {
                PopUpLobbyError(e);
            }

邀请玩家/加入队伍

您需要创建一种方法来向玩家发送邀请。不过,除向玩家发送邀请之外,玩家还可以通过文本通信分享 LobbyCode。

async void TryLobbyJoin(string joinCode)
        {
            try
            {
                var joinOptions = new JoinLobbyByCodeOptions()
                {
                    Player = m_LocalPlayer
                };

                m_PartyLobby = await LobbyService.Instance.JoinLobbyByCodeAsync(joinCode, joinOptions);
                await OnJoinedParty(m_PartyLobby);
            }
            catch (LobbyServiceException e)
            {
                var joinFailMessage = FormatLobbyError(e);
                m_LobbyJoinPopupPopupView.JoinPartyFailed(joinFailMessage);
            }
        }

退出队伍

async void OnLeaveLobby()
        {
            await RemoveFromParty(m_LocalPlayer.Id);
            NotificationEvents.onNotify?.Invoke(
                new NotificationData(
                    "You", "Left the Party!", 1));

            //Leave Lobby Regardless of result
            OnLeftParty();
        }

将玩家从队伍中移除(作为队长)

async Task RemoveFromParty(string playerID)
        {
            try
            {
                await LobbyService.Instance.RemovePlayerAsync(m_PartyLobby.Id, playerID);
            }
            catch (LobbyServiceException e)
            {
                PopUpLobbyError(e);
            }
        }

支持

您可以使用以下方法之一联系 Lobby 支持团队:

  • Multiplayer 后台,通过选择页面右上角的“帮助和支持”图标创建工单。
  • Lobby 论坛Discord 频道中发帖子,详细说明您的问题、功能请求,尽量重现问题的发生情景。