/// <summary> /// ログイン時に取得したデータをキャッシュする。 /// </summary> /// <param name="loginResult"></param> /// <returns></returns> public static async UniTask UpdateLocalCacheAsync(LoginResult loginResult) { // カタログは他のインスタンスの初期化にも必要なので最初に行うこと await UniTask.WhenAll( CatalogManager.SyncPlayFabToClientAsync(), StoreManager.SyncPlayFabToClientAsync(), FriendManager.SyncPlayFabToClientAsync(), NewsManager.SyncPlayFabToClientAsync(), RankingManager.SyncPlayFabToClientAsync()); TitleDataManager.SyncPlayFabToClient(loginResult.InfoResultPayload.TitleData); PlayerProfileManager.SyncPlayFabToClient(loginResult.InfoResultPayload.PlayerProfile, loginResult.InfoResultPayload.PlayerStatistics); InventoryManager.SyncPlayFabToClient(loginResult.InfoResultPayload.UserInventory); VirtualCurrencyManager.SyncPlayFabToClient(loginResult.InfoResultPayload.UserVirtualCurrency); UserDataManager.SyncPlayFabToClient(loginResult.InfoResultPayload.UserData); // ログインボーナス獲得処理 await CheckAndAddLoginBonusAsync(loginResult); }
private async UniTaskVoid Start() { await UniTask.WaitUntil(() => ApplicationEntryPoint.Initialized, cancellationToken : this.GetCancellationTokenOnDestroy()); // 今回のサンプルではインゲームは実装しないつもりなのでいきなりクエストクリア画面へ遷移する。 var quest = CurrentQuest; // 報酬のアイテムと経験値を獲得する。 var(rewardResult, isLevelUp) = await UniTask.WhenAll( StoreManager.PurchaseItemAsync(StoreId.DummyStore, quest.Reward.ItemId, VirtualCurrencyNames.MS.Code, false), VirtualCurrencyManager.AddExpAsync(quest.Reward.Exp, false)); // レベルアップしていればレベルアップ処理を行う。 if (isLevelUp) { await UserDataManager.User.LevelUpAsync(false); } // ミッション情報を更新する。 await UserDataManager.User.Mission.AddMissionActionCount(MissionAction.Quest, 1, true); // PlayFab へログインしなおしてローカルのデータを最新の状態に更新する。 await LoginManager.LoginAndUpdateLocalCacheAsync(); _expText.text = isLevelUp ? $"経験値 {quest.Reward.Exp} を獲得しました。レベルが上がりました。" : $"経験値 {quest.Reward.Exp} を獲得しました。"; var item = rewardResult.Items.FirstOrDefault(x => x.ItemId != quest.Reward.ItemId); var itemMaster = CatalogManager.CatalogItems[item.ItemId]; _itemText.text = $"{itemMaster.DisplayName} を獲得しました。"; if (quest.AfterStories.Any()) { StorySceneController.CurrentQuestAndStoryType = (quest, StoryType.After); _nextButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromMilliseconds(500)).Subscribe(_ => SceneManager.LoadScene("StoryScene")); return; } _nextButton.OnClickAsObservable().ThrottleFirst(TimeSpan.FromMilliseconds(500)).Subscribe(_ => SceneManager.LoadScene("HomeScene")); }
/// <summary> /// アイテムを購入する。 /// </summary> /// <param name="storeItem"></param> /// <returns></returns> private async UniTaskVoid PurchaseAsync(StoreItem storeItem) { var vc = VirtualCurrencyNames.MS; var price = storeItem.VirtualCurrencyPrices[vc.Code]; if (VirtualCurrencyManager.MagicStone < price) { await MessageDialog.ShowAsync($"{vc.Name}が不足しています。"); return; } var item = CatalogManager.CatalogItems[storeItem.ItemId]; var confirm = await ConfirmDialog.ShowAsync($"{vc.Name} {price} 個で{item.DisplayName}を購入しますか?"); if (confirm == DialogResult.Cancel) { return; } await(MessageDialog.ShowAsync($"{item.DisplayName}を購入しました。"), StoreManager.PurchaseItemAsync(StoreId.MainStore, storeItem.ItemId, vc.Code).AsUniTask()); }