すべてを統合する - フレンドを管理する - (Unity モジュール)
注釈:本資料はAI技術を用いて翻訳されています。
ブロックされたプレイヤーを取得するために UI を接続する
-
BlockedPlayersMenu_Starter.csを開き、以下のコードを追加してモジュールラッパーを宣言します:private ManagingFriendsWrapper_Starter managingFriendsWrapper;
private FriendsEssentialsWrapper_Starter friendsEssentialsWrapper; -
既存の
LoadBlockedPlayers()実装を以下のコードに置き換えて、ManagingFriendsWrapper_StarterクラスからGetBlockedPlayers()関数を呼び出します。private void LoadBlockedPlayers()
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Loading);
managingFriendsWrapper.GetBlockedPlayers(OnLoadBlockedPlayersCompleted);
} -
OnLoadBlockedPlayersCompletedコールバック関数を以下のコードに置き換えて、結果を処理します。private void OnLoadBlockedPlayersCompleted(Result<BlockedList> result)
{
if (result.IsError)
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
return;
}
BlockedData[] blockedData = result.Value.data;
if (blockedData.Length <= 0)
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Empty);
return;
}
IEnumerable<string> blockedPlayerIds = blockedData.Select(player => player.blockedUserId);
GetBulkUserInfo(blockedPlayerIds.ToArray());
} -
GetBulkUserInfo()という関数を作成して、ブロックされたプレイヤーのユーザー情報を取得します。private void GetBulkUserInfo(params string[] userIds)
{
friendsEssentialsWrapper.GetBulkUserInfo(userIds, OnGetBulkUserInfoCompleted);
} -
OnGetBulkUserInfoCompleted()というコールバック関数を作成して、結果を処理します。private void OnGetBulkUserInfoCompleted(Result<AccountUserPlatformInfosResponse> result)
{
if (result.IsError)
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
return;
}
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Not_Empty);
ClearBlockedPlayers();
PopulateBlockedPlayers(result.Value.Data);
} -
PopulateBlockedPlayers()という関数を作成して、ブロックされたプレイヤーのリストを入力します。private void PopulateBlockedPlayers(params AccountUserPlatformData[] userInfo)
{
foreach (AccountUserPlatformData baseUserInfo in userInfo)
{
CreatePlayerEntry(baseUserInfo.UserId, AccelByteWarsOnlineUtility.GetDisplayName(baseUserInfo));
}
} -
CreatePlayerEntry()という関数を作成して、ブロックされた各プレイヤーのプレイヤーエントリを作成します。プレイヤーに表示名がない場合、この関数はユーザーIDの最初の5文字を表示名として使用します。private void CreatePlayerEntry(string userId, string displayName)
{
GameObject playerEntry = Instantiate(playerEntryPrefab, resultContentPanel);
playerEntry.name = userId;
BlockedPlayerEntry playerEntryHandler = playerEntry.GetComponent<BlockedPlayerEntry>();
playerEntryHandler.UserId = userId;
playerEntryHandler.FriendName.text = displayName;
blockedPlayers.Add(userId, playerEntry);
} -
OnEnable()関数を更新して、LoadBlockedPlayers()関数を呼び出し、モジュールラッパーを定義します。既存の実装を以下のコードに置き換えます。private void OnEnable()
{
if (managingFriendsWrapper == null)
{
managingFriendsWrapper = TutorialModuleManager.Instance.GetModuleClass<ManagingFriendsWrapper_Starter>();
}
if (friendsEssentialsWrapper == null)
{
friendsEssentialsWrapper = TutorialModuleManager.Instance.GetModuleClass<FriendsEssentialsWrapper_Starter>();
}
if (managingFriendsWrapper != null && friendsEssentialsWrapper != null)
{
LoadBlockedPlayers();
}
}
ブロックされたプレイヤーのアバターを表示するためにUIを接続する
-
BlockedPlayersMenu_Starter.csを開き、RetrieveUserAvatar()という関数を作成してユーザーアバターを取得しますprivate void RetrieveUserAvatar(string userId)
{
friendsEssentialsWrapper.GetUserAvatar(userId, result => OnGetAvatarCompleted(userId, result));
} -
OnGetAvatarCompleted()というコールバック関数を作成して、結果を処理します。private void OnGetAvatarCompleted(string userId, Result<Texture2D> result)
{
if (result.IsError)
{
return;
}
if (!blockedPlayers.TryGetValue(userId, out GameObject playerEntry))
{
return;
}
if (!playerEntry.TryGetComponent(out BlockedPlayerEntry playerEntryHandler))
{
return;
}
Rect rect = new Rect(0f, 0f, result.Value.width, result.Value.height);
playerEntryHandler.FriendImage.sprite = Sprite.Create(result.Value, rect, Vector2.zero);
} -
CreatePlayerEntry()関数を更新して、RetrieveUserAvatar()関数を呼び出します。以下の強調表示されたコードを追加します。private void CreatePlayerEntry(string userId, string displayName)
{
//...
blockedPlayers.Add(userId, playerEntry);
RetrieveUserAvatar(userId);
}
プレイヤーのブロックを解除するためにUIを接続する
-
BlockedPlayersMenu_Starter.csを開き、UnblockPlayer()という関数を作成して、ユーザーIDでプレイヤーのブロックを解除しますprivate void UnblockPlayer(string userId)
{
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptConfirmTitle,
FriendsEssentialsModels.UnblockPlayerConfirmationMessage,
"Yes",
confirmAction: () =>
{
MenuManager.Instance.PromptMenu.ShowLoadingPrompt(FriendsEssentialsModels.UnblockingPlayerMessage);
managingFriendsWrapper.UnblockPlayer(userId, result => OnUnblockPlayerCompleted(userId, result));
},
"No", null);
} -
OnUnblockPlayerCompleted()というコールバック関数を作成して、結果を処理します。この関数は、ブロック解除アクションを確認するためのプロンプトメニューを表示します。private void OnUnblockPlayerCompleted(string userId, Result<UnblockPlayerResponse> result)
{
if (result.IsError)
{
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
result.Error.Message, "OK", null);
return;
}
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptMessageTitle,
FriendsEssentialsModels.UnblockPlayerCompletedMessage, "OK", null);
LoadBlockedPlayers();
} -
CreatePlayerEntry()関数を更新して、ブロック解除ボタンがクリックされたときにUnblockPlayer()関数を呼び出します。以下のコードを追加します。private void CreatePlayerEntry(string userId, string displayName)
{
//...
playerEntryHandler.FriendName.text = displayName;
playerEntryHandler.UnblockButton.onClick.AddListener(() => UnblockPlayer(userId));
blockedPlayers.Add(userId, playerEntry);
//...
}
プレイヤーをブロック、ブロック解除、フレンド解除するためにUIを接続する
-
FriendDetailsMenu_Starter.csを開き、以下のコードを追加してモジュールラッパーを宣言します:private ManagingFriendsWrapper_Starter managingFriendsWrapper; -
OnEnable()関数を更新して、モジュールラッパーを定義します。以下のコードを追加します。private void OnEnable()
{
if (managingFriendsWrapper == null)
{
managingFriendsWrapper = TutorialModuleManager.Instance.GetModuleClass<ManagingFriendsWrapper_Starter>();
}
if (managingFriendsWrapper != null && !string.IsNullOrEmpty(UserId))
{
managingFriendsWrapper.GetBlockedPlayers(OnGetBlockedPlayers);
}
} -
OnGetBlockedPlayers()関数を更新して、現在のユーザーIDの最新のブロックステータスを取得します。private void OnGetBlockedPlayers (Result<BlockedList> result)
{
if (result.IsError)
{
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
result.Error.Message, "OK", null);
return;
}
foreach (BlockedData blockedData in result.Value.data)
{
if (UserId.Equals(blockedData.blockedUserId))
{
EnableButtonByModule(unblockButton, TutorialType.ManagingFriends);
return;
}
}
EnableButtonByModule(blockButton, TutorialType.ManagingFriends);
} -
Unfriend()関数を更新して、ユーザーIDでプレイヤーのフレンド解除を有効にします。既存の実装を以下のコードに置き換えます。private void Unfriend()
{
managingFriendsWrapper.Unfriend(UserId, OnUnfriendCompleted);
unfriendButton.gameObject.SetActive(false);
} -
OnUnfriendCompleted()関数を更新して、結果を処理します。既存の実装を以下のコードに置き換えます。private void OnUnfriendCompleted(Result result)
{
if (result.IsError)
{
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
result.Error.Message, "OK", null);
return;
}
BytewarsLogger.Log($"Successfully unfriended player with user ID: {UserId}");
MenuManager.Instance.PushNotification(new PushNotificationModel
{
Message = result.IsError ? FriendsEssentialsModels.ErrorStatusMessage : FriendsEssentialsModels.UnfriendCompletedMessage
});
addFriendButton.gameObject.SetActive(true);
} -
BlockPlayer()を更新して、ユーザーIDでプレイヤーのブロックを有効にします。既存の実装を以下のコードに置き換えます。private void BlockPlayer()
{
managingFriendsWrapper.BlockPlayer(UserId, OnBlockPlayerCompleted);
blockButton.gameObject.SetActive(false);
} -
OnBlockPlayerCompleted()関数を更新して、結果を処理します。既存の実装を以下のコードに置き換えます。private void OnBlockPlayerComplete(Result<BlockPlayerResponse> result)
{
if (result.IsError)
{
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
result.Error.Message, "OK", null);
return;
}
BytewarsLogger.Log($"Successfully blocked player with user ID: {UserId}");
MenuManager.Instance.PushNotification(new PushNotificationModel
{
Message = result.IsError ? FriendsEssentialsModels.ErrorStatusMessage : FriendsEssentialsModels.BlockPlayerCompletedMessage
});
unblockButton.gameObject.SetActive(true);
} -
UnblockPlayer()を更新して、ユーザーIDでプレイヤーのブロック解除を有効にします。既存の実装を以下のコードに置き換えます。private void UnblockPlayer()
{
managingFriendsWrapper.UnblockPlayer(UserId, OnUnblockPlayerCompleted);
unblockButton.gameObject.SetActive(false);
} -
OnUnblockPlayerCompleted()関数を更新して、結果を処理します。既存の実装を以下のコードに置き換えます。private void OnUnblockPlayerCompleted (Result<UnblockPlayerResponse> result)
{
if (result.IsError)
{
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
result.Error.Message, "OK", null);
return;
}
BytewarsLogger.Log($"Successfully unblocked player with user ID: {UserId}");
MenuManager.Instance.PushNotification(new PushNotificationModel
{
Message = result.IsError ? FriendsEssentialsModels.ErrorStatusMessage : FriendsEssentialsModels.UnblockPlayerCompletedMessage
});
addFriendButton.gameObject.SetActive(true);
blockButton.gameObject.SetActive(true);
UpdatePartyButtons();
}
リソース
- このチュートリアルで使用されているファイルは、Unity Byte Wars GitHub リポジトリで入手できます。