队伍
Create and manage player parties to enable groups of players to join game matches together.
阅读时间3 分钟最后更新于 1 个月前
队伍功能展示了如何在游戏中营造组队体验。队伍是由玩家组成的玩家团体,它将在整个游戏会话期间(从游戏启动到游戏结束)持续存在。队伍会在多个游戏状态下持续存在,例如大厅、配对和游戏主线。与好友列表(一种玩家的永久分组)不同,队伍仅在单个游戏会话的持续时间内存在。
继续之前,请下载并安装 Unity Hub 和受支持版本的 Unity 编辑器。队伍功能支持以下 Unity 编辑器版本:
- Unity 2020.3 LTS 或更高版本
要求
开始使用队伍功能之前,您必须满足以下要求:- 安装 Unity Lobby SDK。
- 您的 Unity 项目已加入 Lobby 服务。
- TextMesh Pro 必要资源。
- 在编辑器中,转到 Window > Textmesh Pro > Import TMP Essential Resources(导入 TMP 必要资源)。
工作流程概述
使用队伍功能时,典型的队伍成员旅程如下:- 玩家 A 创建一个队伍
- 玩家 A 向玩家 B 发送邀请代码
- 玩家 B 使用该代码加入队伍
- 玩家 A 和 B 都在队伍中,然后他们开始第 1 局游戏
- 第 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 频道中发帖子,详细说明您的问题、功能请求,尽量重现问题的发生情景。