/// <summary> /// 統計情報を更新する /// </summary> /// <param name="rankingName">ランキング名</param> /// <param name="value">更新する値</param> public void UpdatePlayerStatistics(string rankingName, int value) { // Playfabにログイン済みかを確認する if (PlayFabClientAPI.IsClientLoggedIn()) { // 通信待ちでなかったら通信開始 if (!waitConnect.GetWait(gameObject.name)) { // 通信待ちに設定する waitConnect.AddWait(gameObject.name); // UpdatePlayerStatisticsRequestのインスタンスを生成 var request = new UpdatePlayerStatisticsRequest { Statistics = new List <StatisticUpdate> { new StatisticUpdate { StatisticName = rankingName, //ランキング名(統計情報名) Value = value, // スコア(int) } } }; Debug.Log($"統計情報名:" + rankingName + " Value:" + value); // スコア情報の更新 Debug.Log($"スコア(統計情報)の更新開始"); PlayFabClientAPI.UpdatePlayerStatistics(request, OnUpdatePlayerStatisticsSuccess, OnUpdatePlayerStatisticsFailure); } } else { Debug.Log("統計情報設定に失敗:PlayFabに未ログイン"); } }
/// <summary> /// カタログデータの取得 /// </summary> private void GetCatalogData() { // 通信タスク名はゲームオブジェクト+Catalog string taskName = gameObject.name + connectCatalogTaskName; if (!waitConnect.GetWait(taskName)) { // 通信待ちに設定する waitConnect.AddWait(taskName); PlayFabClientAPI.GetCatalogItems(new GetCatalogItemsRequest() { CatalogVersion = CatalogName, } , result => { Debug.Log("カタログデータ取得成功!"); CatalogItems = result.Catalog; isCatalogGet = true; // 通信終了 waitConnect.RemoveWait(taskName); } , error => { Debug.Log(error.GenerateErrorReport()); // 通信終了 waitConnect.RemoveWait(taskName); }); } }
/// <summary> /// 仮想通貨の情報を取得 /// </summary> public void GetUserVirtualCurrency() { // 通信待ちでなかったら通信開始 if (!waitConnect.GetWait(gameObject.name)) { // 通信待ちに設定する waitConnect.AddWait(gameObject.name); //GetUserInventoryRequestのインスタンスを生成 var userInventoryRequest = new GetUserInventoryRequest(); //インベントリの情報の取得 Debug.Log($"仮想通貨の情報の取得開始"); PlayFabClientAPI.GetUserInventory(userInventoryRequest, OnSuccessGet, OnErrorGet); } }
/// <summary> /// プレイヤーデータの更新 /// </summary> /// <param name="dataname">データ名</param> /// <param name="data">データ内容</param> public void SetPlayerData(string dataname, string data) { // 通信待ちでなかったら通信開始 if (!waitConnect.GetWait(gameObject.name + dataname)) { // 自分のID以外でユーザーデータを更新しようとしていたら止める if (nominationID != playFabLogin._PlayfabID && nominationID != default) { return; } // 通信待ちに設定する waitConnect.AddWait(gameObject.name + dataname); var change = new Dictionary <string, string> { { dataname, data } }; PlayFabClientAPI.UpdateUserData(new UpdateUserDataRequest { Data = change, Permission = UserDataPermission.Public }, result => { Debug.Log("ユーザーデータの更新に成功"); // キーがまだない場合には作成 if (!this.data.ContainsKey(dataname)) { UserDataRecord record = new UserDataRecord(); this.data.Add(dataname, record); } this.data[dataname].Value = data; // 通信終了 waitConnect.RemoveWait(gameObject.name + dataname); }, error => { Debug.Log(error.GenerateErrorReport()); // 通信終了 waitConnect.RemoveWait(gameObject.name + dataname); }); } }
/// <summary> /// PlayfabへUserName(DisplayName)を更新する。 /// </summary> /// <param name="userName">変更したい名前</param> public void SetUserName(string userName) { // 取得した名前と同じだった場合は更新しない if (userName == DisplayName) { // 成功したことにする setNameResult = SETNAME_RESULT.SUCCESS; return; } // 通信待ちでなかったら通信開始 if (!waitConnect.GetWait(gameObject.name)) { // 通信待ちに設定する waitConnect.AddWait(gameObject.name); var request = new UpdateUserTitleDisplayNameRequest { DisplayName = userName }; PlayFabClientAPI.UpdateUserTitleDisplayName(request, OnSuccess, OnError); // 成功した場合 void OnSuccess(UpdateUserTitleDisplayNameResult result) { Debug.Log("SetDisplayName : success! " + result.DisplayName); DisplayName = result.DisplayName; // 通信終了 waitConnect.RemoveWait(gameObject.name); setNameResult = SETNAME_RESULT.SUCCESS; } // 失敗した場合 void OnError(PlayFabError error) { Debug.Log($"{error.Error}"); // 通信終了 waitConnect.RemoveWait(gameObject.name); setNameResult = SETNAME_RESULT.ERROR; } } }
/// <summary> /// リーダーボードの取得 /// </summary> /// <param name="rankingName">ランキング名</param> /// <param name="startPosition">何位以降のランキングを取得するか</param> /// <param name="maxResultsCount">何件ランキングを取得するか</param> private void GetLeaderboard(string rankingName, int startPosition, int maxResultsCount) { // 通信待ちでなかったら通信開始 if (!waitConnect.GetWait(gameObject.name)) { // 通信待ちに設定する waitConnect.AddWait(gameObject.name); // GetLeaderboardRequestのインスタンスを生成 var request = new GetLeaderboardRequest { StatisticName = rankingName, //ランキング名(統計情報名) StartPosition = startPosition, //何位以降のランキングを取得するか MaxResultsCount = maxResultsCount //ランキングデータを何件取得するか(最大100) }; //ランキング(リーダーボード)を取得 Debug.Log($"ランキング(リーダーボード)の取得開始"); PlayFabClientAPI.GetLeaderboard(request, OnGetLeaderboardSuccess, OnGetLeaderboardFailure); } }
/// <summary> /// インベントリの情報を取得 /// </summary> private void GetUserInventory() { // 通信待ちでなかったら通信開始 if (!waitConnect.GetWait(gameObject.name)) { // 通信待ちに設定する waitConnect.AddWait(gameObject.name); //インベントリの情報の取得 Debug.Log($"インベントリの情報の取得開始"); PlayFabClientAPI.GetUserInventory(new GetUserInventoryRequest() { }, result => { inventoryItems.Clear(); // 通信終了 waitConnect.RemoveWait(gameObject.name); //result.Inventoryがインベントリの情報 Debug.Log($"インベントリの情報の取得に成功 : インベントリに入ってるアイテム数 {result.Inventory.Count}個"); //インベントリに入ってる各アイテムの情報をログで表示 foreach (ItemInstance item in result.Inventory) { Debug.Log($"ID : {item.ItemId}, Name : {item.DisplayName}, ItemInstanceId : {item.ItemInstanceId}"); // ローカルに保存 inventoryItems.Add(item.ItemId, item); } // 取得済みフラグON isGet = true; }, error => { // 通信終了 waitConnect.RemoveWait(gameObject.name); Debug.LogError($"インベントリの情報の取得に失敗\n{error.GenerateErrorReport()}"); }); } }
/// <summary> /// ログイン実行 /// </summary> private void Login() { // 既にログイン済みだったのでIDを保存して終了 if (PlayFabClientAPI.IsClientLoggedIn()) { Debug.Log("PlayFabへログイン済み:IDをPlayFabLoginクラスへ保存します"); PlayFabAuthenticationContext player = PlayFabSettings.staticPlayer; _playfabID = player.PlayFabId; return; } // 通信待ちでなかったら通信開始 if (!waitConnect.GetWait(gameObject.name)) { customID = LoadCustomID(); var request = new LoginWithCustomIDRequest { CustomId = customID, CreateAccount = shouldCreateAccount }; PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure); // 通信待ちに設定する waitConnect.AddWait(gameObject.name); } }