队伍
注意:队伍功能使用 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 必要资源)。
工作流程概述
使用队伍功能时,典型的队伍成员旅程如下:
- 玩家 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 频道中发帖子,详细说明您的问题、功能请求,尽量重现问题的发生情景。