介绍
PlayFab 提供创建在线游戏所需的各种功能。
在这篇文章中,我们将重点介绍其中的大厅功能,并解释如何在 Unity 中使用 PlayFab 大厅功能。
目录
执行环境
如何安装 SDK
大堂介绍
关于大厅的数据
关于大堂业主(业主)
大厅功能列表
1.初始化PlayFabMultiplayer类
2.找到大厅
过滤器字符串
排序字符串
3.创建大厅
访问政策
所有者迁移政策
搜索属性
大堂物业
成员属性
4.进入大厅
5.离开大厅
6.从大厅中删除成员
7.大厅数据的增删改查
会员锁
8. 获取大厅信息
8-1.如果要获取大厅实例
8-2.当会员进入或离开或更新大厅信息时,当您想要执行的过程时
8-3. 如果要获取所有大厅成员的Entity
8-4. 如果要获取大厅成员的成员数据
8-5. 想要获取大厅成员的连接状态时
8-6. 如果您想获取有关大厅所有者的信息
8-7. 想要获取大厅数据时
8-8. 想取得检索数据时
综上所述
引用
执行环境
视窗 10
团结 2021.3.5f1
PlayFab SDK 2.151.220926
PlayFab 多人游戏 SDK 1.3.0.0
如何安装 SDK
1.首先根据下面的URL安装Unity Editor Extensions SDK
2.接下来,创建一个PlayFab帐户并登录Unity Editor
3.根据PlayFab SDK安装指南进行安装
4. 从下面的 Github URL 安装 PlayFab Multiplayer SDK 以使用大厅和匹配功能。
*以zip格式下载和解压缩时,.unitypackage文件可能无法正确解压缩。在这种情况下,只需直接下载 .unitypackage 文件。
就这样。
大堂介绍
大厅是一种服务,它可以创建临时的玩家群体一起玩游戏。
很方便,但是使用有各种规则。
规则的细节在官方参考中有描述,但往往写在意想不到的地方,关于如何使用 Unity 的 PlayFab SDK 的说明很少。
这一次,在这篇文章中,我将解释我正在弄清楚的规则。
我不知道一切,所以如果你能在评论中添加或指出,我将不胜感激。
关于大厅的数据
大厅具有用于不同目的的三种类型的唯一可定义数据。通过使用这些,您可以搜索大厅、管理进出和共享信息。
以下是数据的简要说明。
・会员资料
・与每个成员关联的个人数据。
・您只能更改自己的会员数据。
・大厅数据
・大厅内成员可以共享的数据。
・只有大厅所有者(所有者)可以更改。
・搜索数据
・搜索大厅时可用作参数的搜索数据
・ 键名中只能指定“String_key1, String_key2 ...”和“Number_key1, Number_key2 ...”。
・只有大厅所有者(所有者)可以更改。
关于大堂业主(业主)
大厅功能由服务器和客户端拥有。
(2022/9/29) 目前,可用实体中没有“game_server”,因此只能使用客户端拥有的规范 [1][2]。
对于客户拥有的大厅,所有者拥有两个特权 [3]。
- 可以更改除会员数据外的所有大厅信息。
- 大厅业主可以提名新业主。
当业主离开大厅时
如果所有者离开大厅并且 OwnerMigrationPolicy(确定在迁移所有者时要执行的操作的设置)是不允许选择新所有者的设置(None、Manual),则初始化大厅所有者信息。 OwnerMigrationPolicy 可以选择为 Automatic,它会自动选择一个新的所有者[3]。当业主与大厅断开连接时
如果所有者与大厅断开连接并且 OwnerMigrationPolicy 阻止选择新所有者,则大厅的所有者权限将保持未初始化状态。当所有成员离开大厅时
最后一个成员离开时,大厅将被删除。大厅功能列表
现在,我将解释如何使用 Unity 的 PlayFab Multiplayer SDK 来使用大厅。最低使用量在下面的官方页面上进行了说明。我认为最好参考这里进行登录 PlayFab 等处理。再次,这篇文章不会解释 Lobby SDK 中的所有功能,而是介绍您需要使用的基本功能。事物。我不会解释比基础更进一步的功能,例如邀请大厅的朋友和与匹配功能的链接。注意。
此外,由于 PlayFab Multiplayer SDK 的方法是向 PlayFab Lobby API 发送 http 请求的方法,您可以从下面链接中列出的官方 API 参考中查看特定方法和参数的描述。
在这篇文章中,我将结合一个实现示例,在补充官方参考中难以理解的点的同时进行解释。
1.初始化PlayFabMultiplayer类
为了使用大厅功能,需要以下四项准备工作。
1.登录到 PlayFab
2.初始化 PlayFabMultiplayer 类
3.在 Update 中编写一个监视大厅(和匹配)状态变化的方法。
4.退出时重置 PlayFabMultiplayer 类
由于官方参考等文章中介绍了PlayFab登录,所以大部分都会省略,但是会在请求成功时执行。我只声明需要在 OnLoginSuccess 方法中获取以下信息。private void OnLoginSuccess(LoginResult result) { // はじめてリクエストメソッドを実行するときに必要になる認証情報 authContext = result.AuthenticationContext // 2回目以降にリクエストメソッドを実行するときに必要になる認証情報(UserEntity) entityKey = new PFEntityKey(authContext); }接下来,我将解释剩下的2、3和4。
也就是说,这很容易,只需将“PlayFabMultiplayerEventProcesser”预制件放入Hierarchy中导入的“PlayFabMultiplayerSDK”文件夹中的“Prefabs”中,所有准备工作就完成了。
我将简要解释所附脚本的内容。我保留了原来的评论。namespace PlayFab.Multiplayer { using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayfabMultiplayerEventProcessor : MonoBehaviour { private void Awake() { // Exists across scenes for convenience. DontDestroyOnLoad(this); if (!PlayFabMultiplayer.IsInitialized) { // PlayFabMultiplayerクラスの初期化 PlayFabMultiplayer.Initialize(); } } private void Update() { // ロビーやマッチングの情報を取得し、状態に変化があるのかを監視するためのメソッド // This object just automatically processes the state changes which in turn triggers // the PlayFabMultiplayer.On* events that your other scripts can listen to. PlayFabMultiplayer.ProcessLobbyStateChanges(); PlayFabMultiplayer.ProcessMatchmakingStateChanges(); } private void OnDestroy() { // PlayFabMultiplayerクラスに登録したイベント等パラメータを削除し、 // Initialize()を実行する前の状態に戻す。 PlayFabMultiplayer.Uninitialize(); } }假设在做好上述准备后,执行以下大厅功能方法。
在这里,使用该方法时有一个警告。我会介绍在 PlayFab 多人游戏 SDK 中发送 http 请求的所有方法都包括异步处理。,需要用 await 等等待,直到方法执行完成。这就是为什么我使用 UniTask 来编写它以等待该过程完成。2.找到大厅
我将介绍搜索将首先实现的大厅的功能。首先我会给出一个实现示例,然后对参数进行一一解释。
public async UniTask FindLobby(string roomName) { // UserEntityについてはこのように作成することもできます。 UserEntity = new PFEntityKey (PlayFabSettings.staticPlayer.EntityId, PlayFabSettings.staticPlayer.EntityType); bool isRequestComplete = false; // string_key1はroomeNameと一致していて かつ // ロビーのmembershipLock設定がUnlockになっていて かつ // ロビーに入室している人数が4人以下のルームを検索して、 // string_key1を基準に昇順に取得 LobbySearchConfiguration config = new LobbySearchConfiguration { FilterString = $"(string_key1 eq '{roomName}')" + "(lobby/membershipLock eq 'Unlocked') and " + "(lobby/memberCount lt 4)", SortString = "string_key1 asc" }; // OnFindLobbiesSuccessメソッドを定義しても良いですが、このようにラムダ式でハンドラを定義して代入することもできます。 PlayFabMultiplayer.OnLobbyFindLobbiesCompletedHandler handler = null; handler = (IList<LobbySearchResult> searchResults, PFEntityKey newMember, int reason) => { if (LobbyError.SUCCEEDED(reason)) { // 成功時の処理 Debug.Log("ロビー検索成功serachResultsにロビーが格納されています"); Debug.Log($"ロビーを指定して検索するする時にに必要なロビーID{serachResults[0].LobbyId}") Debug.Log($"ロビーに参加する時に必要なConnectionString{serachResults[0].ConnectionString}") Debug.Log($"ロビーのオーナー(所有者)のEntityKey{serachResults[0].OwnerEntity}") Debug.Log($"ロビーに入室できる最大人数{serachResults[0].MaxMemberCount}") Debug.Log($"現在ロビーに入室している人数{serachResults[0].CurrentMemberCount}") Debug.Log($"ロビーに設定されているサーチデータ{serachResults[0].SearchProperties}") } else { // Error時の処理 Debug.Log("ロビー検索エラー"); } // 登録したこのメソッドを登録解除する。(この処理をしないと、検索メソッドを実行するたび同じメソッドが多重に登録される) PlayFabMultiplayer.OnLobbyFindLobbiesCompleted -= handler; isRequestComplete = true; }; // メソッドの登録(この時点ではまだ実行されていない。) PlayFabMultiplayer.OnLobbyFindLobbiesCompleted += handler; // 非同期メソッドの実行(ログイン時に取得したauthContextとconfigrationクラスが必要) PlayFabMultiplayer.FindLobbies(authContext, config); // isRequestCompleteがtrueになるまで待つ。 await UniTask.WaitUntil(() => isRequestComplete); }LobbyConfigration 类是执行方法时要设置的参数集合。 LobbySearchConfiguration 描述了搜索大厅的条件和列表顺序。
过滤器字符串
搜索条件。条件以一种称为 OData 语言的稍微特殊的符号来描述。
OData语言的编写方法请参考官方页面和PlayFab的git页面[5]。过滤规则是- 关于可独立定义的参数的key,value为字符类型时只有key名称“string_key1,string_key2...”可用,value为数字类型时可用“number_key1,number_key2...”(可以在创建大厅时定义。定义示例在 Lobby Creation 中描述)。
- 使用大厅原有的参数(maxMemberCount大厅最大人数,membershipLock是否可搜索)时,输入大厅/(参数名称)。可用参数可在 REST API 描述页面 [6] 上找到。
排序字符串
这是对获取的大厅列表进行排序的设置。
通过编写“(参数名称)asc(或desc)”,您可以获得处于排序状态的大厅列表。3.创建大厅
创建大厅的能力。基本用法与搜索大厅时相同。
public async UniTask CreateLobby(string roomName, string userName) { // 作成するロビーの設定 LobbyCreateConfiguration createConfig = new LobbyCreateConfiguration() { // 部屋の検索可能設定 AccessPolicy = LobbyAccessPolicy.Public, // ロビーへの最大接続人数の設定 MaxMemberCount = 4, // オーナーが退出した際にオーナー権限をどうするかの設定 OwnerMigrationPolicy = LobbyOwnerMigrationPolicy.Automatic, }; // ロビーの検索に用いるデータの登録 createConfig.SearchProperties["string_key1"] = roomName; createConfig.SearchProperties["string_key2"] = "hoge"; createConfig.SearchProperties["number_key1"] = "1234"; // ロビーメンバーで共有できるロビーデータの登録 createConfig.LobbyProperties["lobbyName"] = "something"; // 作成者個人のメンバーデータ LobbyJoinConfiguration joinConfig = new LobbyJoinConfiguration(); joinConfig.MemberProperties["UserName"] = userName; joinConfig.MemberProperties["nanigashi"] = "fuga"; bool isRequestComplete = false; PlayFabMultiplayer.OnLobbyCreateAndJoinCompletedHandler handler = null; handler = (PlayFab.Multiplayer.Lobby lobby, int result) => { if (LobbyError.SUCCEEDED(result)) { Debug.Log($"フレンドマッチ用のロビーの作成に成功しました"); } else { Debug.Log("ロビー作成失敗"); } PlayFabMultiplayer.OnLobbyCreateAndJoinCompleted -= handler; isRequestComplete = true; }; PlayFabMultiplayer.OnLobbyCreateAndJoinCompleted += handler; // 返り値にロビーの情報や「退出」や「メンバーの追い出し」、「ロビーの情報更新」等のロビー内で行う重要なメソッドを保有しているLobbyクラスのインスタンスが帰ってきます。 Lobby ConnectLobby = PlayFabMultiplayer.CreateAndJoinLobby(entity, createConfig, joinConfig); await UniTask.WaitUntil(() => isRequestComplete); }LobbyCreateConfiguration.AccessPolicy
这是一个关于是否启用大厅搜索的设置。有3种。
上市:任何人都可以搜索的设置。
私人的:无法通过搜索找到的设置。您需要大厅成员的邀请才能进入。
朋友: 只有大厅成员的朋友才能搜索。LobbyCreateConfiguration.OwnerMigrationPolicy
这是业主离开大厅时如何处理业主权限的设置。顺便说一下,在CreateAndJoinLobby得到的Lobby类中使用GetOwner()可以得到当前大厅的所有者Entity。
自动的:这是一个自动授予大厅中的一个成员所有者权限的设置。
手动的:此设置允许任何人在所有者断开连接后向所有者宣传自己。
没有任何:此设置允许任何人将自己提升为所有者,而不管所有者的连接状态如何。
服务器:服务器是大厅所有者并且没有任何成员拥有它的设置。 (目前还没有)LobbyCreateConfiguration.SearchProperties
注册可用于搜索的搜索数据。如果 Value 是字母,则只能使用键名“string_key1, string_key2...”,如果 Value 是数字,则只能使用“number_key1,number_key2...”。用 number_key 注册时,Value 是一个数字,但由于 SearchProperties 是一个 Dictionary,所以需要将数字注册为字符串类型。
示例)createConfig.SearchProperties["number_key1"] = "1234";LobbyCreateConfiguration.LobbyProperties
所有进入大厅的成员都可以共享的大厅数据。与搜索数据不同,您可以定义自己的 Key 名称。
LobbyJoinConfiguration.MemberProperties
链接到各个成员的成员数据。您可以定义自己的键名以及大厅数据。
4.进入大厅
能够加入大厅。
public async UniTask JoinLobby(string roomName, string userName) { bool isRequestComplete = false; PlayFabMultiplayer.OnLobbyJoinCompletedHandler handler = null; handler = (Lobby lobby, PFEntityKey newMember, int reason) => { if (LobbyError.SUCCEEDED(reason)) { Debug.Log("ロビーに参加しました!"); } else { Debug.Log("ロビー参加失敗しました"); } PlayFabMultiplayer.OnLobbyJoinCompleted -= handler; isRequestComplete = true; }; // 参加するメンバー自身のメンバーデータ Dictionary<string, string> memberData = new Dictionary<string, string> { {"UserName", userName }, {"nanigashi", "soregashi" } }; PlayFabMultiplayer.OnLobbyJoinCompleted += handler; // ロビー検索で取得したConnectionStringをもとに参加するロビーを指定する。 Lobby ConnectLobby = PlayFabMultiplayer.JoinLobby(entity, ConnectLobbyString, memberData); await UniTask.WaitUntil(() => isRequestComplete); }每个参数与大厅创建没有太大区别,所以我将其省略。
5.离开大厅
此功能用于退出大厅。
public async UniTask LeaveLobby() { bool isRequestComplete = false; PlayFabMultiplayer.OnLobbyDisconnected += (Lobby lobby) => { Debug.Log($"ロビーから退出しました"); isRequestComplete = true; }; // ロビーの作成、参加時に返り値として取得できるLobbyインスタンスのメソッドから実行できます。 ConnectLobby.LeaveAllLocalUsers(); await UniTask.WaitUntil(() => isRequestComplete); }6.从大厅中删除成员
此功能强制成员离开大厅。只有大堂老板才能做到。
public async UniTask ForceRemoveMember(PFEntity removeMemberEntity) { bool isRequestComplete = false; PlayFabMultiplayer.OnForceRemoveMemberCompletedHandler handler = null; handler = (Lobby lobby, PFEntityKey targetMember, int reason) => { if (LobbyError.SUCCEEDED(reason)) { Debug.Log($"プレイヤーを強制退出させました"); } else { Debug.Log($"プレイヤーの強制退出に失敗しました"); } PlayFabMultiplayer.OnForceRemoveMemberCompleted -= handler; isRequestComplete = true; }; PlayFabMultiplayer.OnForceRemoveMemberCompleted += handler; // キックしたプレイヤーの再入室を拒否するかのbool。trueの場合は再入室不可。 bool preventRejoin = true; // 退出させるメンバーのEntityを指定する。 ConnectLobby.ForceRemoveMember(removeMemberEntity, preventRejoin); await UniTask.WaitUntil(() => isRequestComplete); }7. 大厅数据的增删改查
这是一个可以更新大厅中设置的任何信息的功能。请注意,只有大厅的所有者才能更新大厅信息,具体取决于 OwnerMigrationPolicy 设置。您还可以更新与个人关联的成员数据。会员只能更新自己的数据。
public async UniTask PostUpdateLobby() { bool isRequestComplete = false; // イベントハンドラーの定義 PlayFabMultiplayer.OnLobbyPostUpdateCompletedHandler handler = null; handler = (Lobby lobby, PFEntityKey localUser, int result) => { if (LobbyError.SUCCEEDED(result)) { Debug.Log("ロビー、メンバーの情報更新成功"); } else { Debug.Log("ロビー、メンバーの情報更新失敗"); } PlayFabMultiplayer.OnLobbyPostUpdateCompleted -= handler; isRequestComplete = true; }; PlayFabMultiplayer.OnLobbyPostUpdateCompleted += handler; // 更新するデータをまとめたクラス LobbyDataUpdate lobbyDataUpdate = new LobbyDataUpdate { AccessPolicy = LobbyAccessPolicy.Private, MaxMemberCount = 4, MembershipLock = LobbyMembershipLock.Locked // オーナーから別のメンバーに権限の委譲もできます。 NewOwner = NewOwnerEntity }; // 既に登録されているロビーデータの変更や、新しくロビーデータを登録することも可能 lobbyDataUpdate.LobbyProperties["NewHoge"] = "NewHogehoge"; lobbyDataUpdate.LobbyProperties["alreadyRegisteredHoge"] = "ChangeHoge"; // サーチデータも同様に変更可能 lobbyDataUpdate.SearchProperties["string_key3"] = "NewSearchHoge"; // 更新するメンバーデータをまとめたクラス IDictionary<string, string> memberProperties = new IDictionary<string, string>(); memberProperties["hoge"] = "fuga"; // 自分のEntityを入れて実行する。 // lobbyDataUpdateを入れる場合はオーナーでなければ変更できません。 // メンバーデータのみの場合は自分のメンバーデータを変更することのみ可能です。 ConnectLobby.PostUpdate(entity, lobbyDataUpdate, memberProperties); await UniTask.WaitUntil(() => isRequestComplete); }会员锁定
您可以设置新成员是否可以进入大厅。
解锁: 未锁定。新成员可以自由进入。
锁定: 锁定。新成员不能进入。8. 获取大厅信息
通过 PlayfabMultiplayerEventProcessor 的更新中的 PlayFabMultiplayer.ProcessLobbyStateChanges() 更新大厅状态信息,包括其他人的更改。以下是获取更新大厅信息的方法。
8-1.如果要获取大厅实例
实际上,大厅创建和加入方法的返回值得到的Lobby实例也可以从方法Lobby.GetLobbyUsingCache()中获取。
// ロビーインスタンスを取得できる。 Lobby ConnectLobby = Lobby.GetLobbyUsingCache();通过使用该方法,可以从通过创建大厅或加入方法获得的实例中难以参考的位置使用它。
8-2.当会员进入或离开或更新大厅信息时,当您想要执行的过程时
您可能只想在成员进入或离开大厅时或大厅信息更新时进行一些处理。 LobbySDK 提供了一种机制,用于注册在大厅状态发生变化时要执行的方法。首先,让我们看一个实现示例。
// ロビーに入室する前にこのメソッドを実行して、それぞれのイベントを登録しておく必要があります。 // デフォルトでは何も登録されていません。 public void Init() { // 行いたいイベントを登録する。今までの説明と同じでラムダ式で定義してもOK PlayFabMultiplayer.OnLobbyMemberAdded += AddMember; PlayFabMultiplayer.OnLobbyMemberRemoved += RemoveMember; PlayFabMultiplayer.OnLobbyUpdated += UpdateLobby; } // メンバーが追加された時に呼び出されます。 private void AddMember(Lobby lobby, PFEntityKey member) { Debug.Log("メンバーを追加しました。"); } // メンバーもしくは自分が退出した際に呼び出されます。 public void RemoveMember(Lobby lobby, PFEntityKey member, LobbyMemberRemovedReason reason) { Debug.Log("メンバー(もしくは自分)が退出しました。"); if (reason == LobbyMemberRemovedReason.LocalUserForciblyRemoved) { // 自分がオーナーに強制的に退出させられた時 } else if(reason == LobbyMemberRemovedReason.RemoteUserLeftLobby) { // 自分以外の誰かが退出した時 } else if(reason == LobbyMemberRemovedReason.LocalUserLeftLobby) { // ローカル上にいるプレイヤー(自分)が退出した時 } Debug.Log($"退出理由:{reason}"); } // ロビーの情報が更新された際に呼び出されます。 public void UpdateLobby( Lobby lobby, bool ownerUpdated, bool maxMembersUpdated, bool accessPolicyUpdated, bool membershipLockUpdated, IList<string> updatedSearchPropertyKeys, IList<string> updatedLobbyPropertyKeys, IList<LobbyMemberUpdateSummary> memberUpdates) { Debug.Log("ロビーの情報を更新しました。どの情報が更新されたのかも引数のパラメータから知ることができます"); }有两个警告。当你运行它时你会明白,但我会解释它以防万一。
- 如果有人走进您的大厅,
OnLobbyMember已添加
OnLobby已更新
和两个打电话。如果你仔细想想,这很明显,但你需要小心,因为成员的增加也包含在信息更新中。离开时也会调用 OnMemberRemoved 和 OnLobbyUpdated。 - 如果您进入有多人的大厅(在本例中为有两个人的大厅),
OnLobbyMember已添加
OnLobby已更新
OnLobbyMember已添加
OnLobby已更新
并添加条目,更新方法执行两次。这是因为成员添加过程是逐个进行的,每个过程都会调用add和update方法。8-3. 如果要获取所有大厅成员的Entity
可以在 Lobby 实例中使用 GetMembers() 获取,可以通过大厅创建或加入方法的返回值获取。
// ロビーメンバーのEntityのリストを取得できる。 IList<PFEntityKey> ConnectMembersEntity = ConnectLobby.GetMembers();8-4. 如果要获取大厅成员的成员数据
可以使用大厅成员实体在大厅实例中通过 GetMemberProperties(entity) 获取。
// メンバーデータを1人ずつ取得することができます。 IDictionary<string, string> memberData = ConnectLobby.GetMemberProperties(memberEntity); string memberName = memberData["UserName"];8-5. 想要获取大厅成员的连接状态时
可以使用大厅成员实体在大厅实例中通过 GetMemberConnectionStatus(entity) 获取。
// メンバーの接続状態を1人ずつ取得することができます。 // statusには「LobbyMemberConnectionStatus.NotConnected」か「LobbyMemberConnectionStatus.Connected」のどちらかが格納されます。 LobbyMemberConnectionStatus status = ConnectLobby.GetMemberConnectionStatus(memberEntity);8-6. 如果您想获取有关大厅所有者的信息
可以在 Lobby 实例中使用 TryGetOwner(out PFEntityKey owner) 来查找是否有所有者,如果有所有者,则可以获取所有者的 Entity。
// existOwnerにはオーナーがいるかどうかのboolが返ってきます。(オーナーがいる場合はtrue) // そしてオーナーがいる場合にはownerにオーナーのentityが格納されます。オーナーがいない場合にはnullが格納されます。 bool existOwner = ConnectLobby.TryGetOwner(out PFEntityKey owner);8-7. 想要获取大厅数据时
您可以使用 Lobby 实例上的 GetLobbyProperties() 来获取它。
// ロビーに登録されているロビーデータをIDict型で取得できる。 IDictionary<string, string> lobbyData = ConnectLobby.GetLobbyProperties();8-8. 想要取得检索数据时
它可以通过 Lobby 实例中的 GetSearchProperties() 获得。
// ロビーに登録されているサーチデータをIDict型で取得できる。 IDictionary<string, string> searchData = ConnectLobby.GetSearchProperties();综上所述
上面解释了基本功能。
除了本次介绍的功能外,大厅内还有“大厅邀请功能”、“配合PlayFab的匹配功能与匹配的人进入同一大厅的功能”等多项功能。如果以后有时间,我想介绍一下匹配功能。
我们希望这篇文章对您实现大厅功能有所帮助。引用
“1”https://community.playfab.com/questions/62439/how-can-i-get-a-server-to-be-of-entity-type-game-s.html
“2”https://learn.microsoft.com/ja-jp/gaming/playfab/features/data/entities/available-built-in-entity-types
“3”https://docs.microsoft.com/ja-jp/gaming/playfab/features/multiplayer/lobby/owner-requirements-and-privileges
“4”https://docs.microsoft.com/ja-jp/gaming/playfab/features/multiplayer/lobby/ownership-changes
“5”https://github.com/MicrosoftDocs/playfab-docs/blob/docs/playfab-docs/features/multiplayer/lobby/find-lobbies.md
“6”https://learn.microsoft.com/ja-jp/rest/api/playfab/multiplayer/lobby/find-friend-lobbies?view=playfab-rest
- 如果有人走进您的大厅,
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308628183.html