すべてを統合する - フレンドを追加する - (Unity モジ ュール)
注釈:本資料はAI技術を用いて翻訳されています。
受信リクエストを取得するためにUIを接続する
-
FriendRequestsMenu_Starter.csを開き、FriendsEssentialsWrapper_Starterクラスをプライベート変数として宣言します。private FriendsEssentialsWrapper_Starter friendsEssentialsWrapper; -
OnEnable()関数に移動し、以下のコードを追加してFriendsEssentialsWrapper_Starterを取得します。private void OnEnable()
{
if (friendsEssentialsWrapper == null)
{
friendsEssentialsWrapper = TutorialModuleManager.Instance.GetModuleClass<FriendsEssentialsWrapper_Starter>();
}
} -
LoadIncomingFriendRequests()関数を以下のコードに置き換えて、ラッパークラスからLoadIncomingFriendRequests()関数を呼び出し、結果を処理するコールバック関数としてOnLoadIncomingFriendRequestsCompletedを渡します。private void LoadIncomingFriendRequests()
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Loading);
friendsEssentialsWrapper.LoadIncomingFriendRequests(OnLoadIncomingFriendRequestsCompleted);
} -
OnLoadIncomingFriendRequestsCompletedコールバック関数を置き換えて、結果が失敗または空の場合はUIを表示し、結果からフレンドIDリストのユーザー情報を取得します。private void OnLoadIncomingFriendRequestsCompleted(Result<Friends> result)
{
if (result.IsError)
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
return;
}
if (result.Value.friendsId.Length <= 0)
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Empty);
return;
}
GetBulkUserInfo(result.Value);
} -
フレンドIDのリストからユーザー情報を取得するメイン関数として、
GetBulkUserInfo()という関数を作成します。private void GetBulkUserInfo(Friends friends)
{
friendsEssentialsWrapper.GetBulkUserInfo(friends.friendsId, OnGetBulkUserInfoCompleted);
} -
GetBulkUserInfo()関数から取得したユーザー情報を表示するために、OnGetBulkUserInfoCompleted()というコールバック関数を作成します。private void OnGetBulkUserInfoCompleted(Result<AccountUserPlatformInfosResponse> result)
{
if (result.IsError)
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
return;
}
ClearFriendRequestList();
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Not_Empty);
PopulateFriendRequestList(result.Value.Data);
} -
フレンドリクエストリストを入力するために、
PopulateFriendRequestList()という関数を作成します。private void PopulateFriendRequestList(params AccountUserPlatformData[] userInfo)
{
foreach (AccountUserPlatformData baseUserInfo in userInfo)
{
CreateFriendEntry(baseUserInfo.UserId, AccelByteWarsOnlineUtility.GetDisplayName(baseUserInfo));
}
} -
各フレンドリクエストのフレンドエントリを作成するために、
CreateFriendEntry()という関数を作成します。private void CreateFriendEntry(string userId, string displayName)
{
GameObject playerEntry = Instantiate(friendEntryPrefab, resultContentPanel);
playerEntry.name = userId;
FriendEntry playerEntryHandler = playerEntry.GetComponent<FriendEntry>();
playerEntryHandler.EntryView = FriendEntry.FriendEntryView.PendingInbound;
playerEntryHandler.UserId = userId;
playerEntryHandler.FriendName.text = displayName;
friendRequests.Add(userId, playerEntry);
} -
UIが有効になったときにフレンドリクエストリストを読み込むように、
OnEnable()関数を更新します。以下のコードを追加します。private void OnEnable()
{
//...
if (friendsEssentialsWrapper != null)
{
LoadIncomingFriendRequests();
}
}
送信リクエストを取得するためにUIを接続する
-
SentFriendRequestsMenu_Starter.csを開き、FriendsEssentialsWrapper_Starterクラスをプライベート変数として宣言します。private FriendsEssentialsWrapper_Starter friendsEssentialsWrapper; -
OnEnable()関数に移動し、以下のコードを追加してfriendsEssentialsWrapperを取得します。private void OnEnable()
{
if (friendsEssentialsWrapper == null)
{
friendsEssentialsWrapper = TutorialModuleManager.Instance.GetModuleClass<FriendsEssentialsWrapper_Starter>();
}
} -
LoadOutgoingFriendRequests()を以下のコードに置き換えて、ラッパークラスからLoadOutgoingFriendRequests()関数を呼び出し、結果を処理するコールバック関数としてOnLoadOutgoingFriendRequestsCompletedを渡します。private void LoadOutgoingFriendRequests()
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Loading);
friendsEssentialsWrapper.LoadOutgoingFriendRequests(OnLoadOutgoingRequestsCompleted);
} -
OnLoadOutgoingRequestsCompleted()というコールバック関数を作成します。これは、LoadOutgoingFriendRequestsが失敗した場合にUIを処理し、成功した場合は取得したフレンドIDに基づいてユーザー情報を取得します。private void OnLoadOutgoingRequestsCompleted(Result<Friends> result)
{
if (result.IsError)
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
return;
}
if (result.Value.friendsId.Length <= 0)
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Empty);
return;
}
GetBulkUserInfo(result.Value);
} -
GetBulkUserInfo()という関数を作成します。これは、フレンドIDのリストからユーザー情報を取得するメイン関数です。private void GetBulkUserInfo(Friends friends)
{
friendsEssentialsWrapper.GetBulkUserInfo(friends.friendsId, OnGetBulkUserInfoCompleted);
} -
GetBulkUserInfo()関数から取得したユーザー情報を表示するために、OnGetBulkUserInfoCompleted()というコールバック関数を作成します。private void OnGetBulkUserInfoCompleted(Result<AccountUserPlatformInfosResponse> result)
{
if (result.IsError)
{
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
return;
}
ClearFriendRequestList();
widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Not_Empty);
PopulateFriendRequestList(result.Value.Data);
} -
送信したフレンドリクエストリストを入力するために、
PopulateFriendRequestList()という関数を作成します。private void PopulateFriendRequestList(params AccountUserPlatformData[] userInfo)
{
foreach (AccountUserPlatformData baseUserInfo in userInfo)
{
CreateFriendEntry(baseUserInfo.UserId, AccelByteWarsOnlineUtility.GetDisplayName(baseUserInfo));
}
} -
各フレンドリクエストの送信済みフレンドエントリを作成するために、
CreateFriendEntry()という関数を作成します。private void CreateFriendEntry(string userId, string displayName)
{
GameObject playerEntry = Instantiate(friendEntryPrefab, resultContentPanel);
playerEntry.name = userId;
FriendEntry playerEntryHandler = playerEntry.GetComponent<FriendEntry>();
playerEntryHandler.EntryView = FriendEntry.FriendEntryView.PendingOutbound;
playerEntryHandler.UserId = userId;
playerEntryHandler.FriendName.text = displayName;
friendRequests.Add(userId, playerEntry);
} -
UIが有効になったときに送信済みフレンドリクエストリストを読み込むように、
OnEnable()関数を更新します。以下のコードを追加します。private void OnEnable()
{
//...
if (friendsEssentialsWrapper != null)
{
LoadOutgoingFriendRequests();
}
}
フレンドリクエストのアバターを表示するためにUIを接続する
-
FriendRequestsMenu_Starter.csとSentFriendRequestsMenu_Starter.csの両方で、ユーザーアバターを取得し、結果ハンドラーとしてOnGetAvatarCompletedを渡すために、RetrieveUserAvatar()という関数を作成します。private void RetrieveUserAvatar(string userId)
{
friendsEssentialsWrapper.GetUserAvatar(userId, result => OnGetAvatarCompleted(result, userId));
} -
RetrieveUserAvatar()からの結果を処理するために、両方のファイルにOnGetAvatarCompleted()というコールバック関数を作成します。private void OnGetAvatarCompleted(Result<Texture2D> result, string userId)
{
if (result.IsError)
{
BytewarsLogger.LogWarning($"Unable to get avatar for user Id: {userId}, " +
$"Error Code: {result.Error.Code}, " +
$"Error Message: {result.Error.Message}");
return;
}
if (result.Value == null || !friendRequests.TryGetValue(userId, out GameObject friendEntry))
{
return;
}
Image friendImage = friendEntry.GetComponent<FriendEntry>().FriendImage;
Rect imageRect = new Rect(0f, 0f, result.Value.width, result.Value.height);
friendImage.sprite = Sprite.Create(result.Value, imageRect, Vector2.zero);
} -
両方のファイルの
CreateFriendEntry()関数を更新して、RetrieveUserAvatar()関数を呼び出します。private void CreateFriendEntry(string userId, string displayName)
{
//...
friendRequests.Add(userId, playerEntry);
RetrieveUserAvatar(userId);
}
フレンドリクエストを承認、拒否、キャンセルするためにUIを接続する
-
FriendRequestsMenu_Starter.csで、受信したフレンドリクエストを承認するために、AcceptFriendInvitation()という関数を作成します。private void AcceptFriendInvitation(string userId)
{
MenuManager.Instance.PromptMenu.ShowLoadingPrompt(FriendsEssentialsModels.AcceptingFriendRequestMessage);
friendsEssentialsWrapper.AcceptFriend(userId, OnAcceptInvitationCompleted);
} -
結果を処理するために、
OnAcceptInvitationCompleted()というコールバック関数を作成します。これは、リクエストが完了したことの確認を表示し、フレンドリクエストリストを更新します。private void OnAcceptInvitationCompleted(IResult result)
{
if (result.IsError)
{
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
result.Error.Message, "OK", null);
return;
}
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptMessageTitle,
FriendsEssentialsModels.FriendRequestAcceptedMessage, "OK", null);
LoadIncomingFriendRequests();
} -
受信したフレンドリクエストを拒否するために、
DeclineFriendInvitation()という関数を作成します。private void DeclineFriendInvitation(string userId)
{
MenuManager.Instance.PromptMenu.ShowLoadingPrompt(FriendsEssentialsModels.RejectingFriendRequestMessage);
friendsEssentialsWrapper.DeclineFriend(userId, OnDeclineInvitationCompleted);
} -
結果を処理するために、
OnDeclineInvitationCompleted()というコールバック関数を作成します。これは、リクエストが完了したことの確認を表示し、フレンドリクエストリストを更新します。private void OnDeclineInvitationCompleted(IResult result)
{
if (result.IsError)
{
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
result.Error.Message, "OK", null);
return;
}
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptMessageTitle,
FriendsEssentialsModels.FriendRequestRejectedMessage, "OK", null);
LoadIncomingFriendRequests();
} -
承認ボタンと拒否ボタンを
AcceptFriendInvitation()とDeclineFriendInvitation()関数に接続するために、以下のコードをCreateFriendEntry()に追加します。private void CreateFriendEntry(string userId, string displayName)
{
//...
playerEntryHandler.UserId = userId;
playerEntryHandler.FriendName.text = displayName;
playerEntryHandler.AcceptButton.onClick.AddListener(() => AcceptFriendInvitation(userId));
playerEntryHandler.RejectButton.onClick.AddListener(() => DeclineFriendInvitation(userId));
friendRequests.Add(userId, playerEntry);
//...
} -
SentFriendRequestsMenu_Starter.csを開き、フレンドリクエストをキャンセルするために、CancelFriendRequest()という関数を作成します。private void CancelFriendRequest(string userId)
{
MenuManager.Instance.PromptMenu.ShowLoadingPrompt(FriendsEssentialsModels.CancelingFriendRequestMessage);
friendsEssentialsWrapper.CancelFriendRequests(userId, result => OnCancelFriendRequestCompleted(userId, result));
} -
結果を処理するために、
OnCancelFriendRequestCompleted()というコールバック関数を作成します。これは、リクエストが完了したことの確認を表示し、送信済みフレンドリクエストリストを更新します。private void OnCancelFriendRequestCompleted(string userId, IResult result)
{
if (result.IsError)
{
MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle,
result.Error.Message, "OK", null);
return;
}
MenuManager.Instance.PromptMenu.ShowPromptMenu("Message", FriendsEssentialsModels.FriendRequestCanceledMessage, "OK", null);
LoadOutgoingFriendRequests();
} -
キャンセルボタンを
CancelFriendRequest()関数に接続するために、以下のコードをCreateFriendEntry()に追加します。private void CreateFriendEntry(string userId, string displayName)
{
//...
playerEntryHandler.UserId = userId;
playerEntryHandler.FriendName.text = displayName;
playerEntryHandler.CancelButton.onClick.AddListener(() => CancelFriendRequest(userId));
friendRequests.Add(userId, playerEntry);
//...
}
フレンドリクエストイベントをリッスンするためにUIを接続する
-
FriendRequestsMenu_Starter.csを開き、OnIncomingRequestとOnRequestCanceledイベントをリッスンするようにAwake()関数を変更します。以下のコードを追加します。private void Awake()
{
backButton.onClick.AddListener(MenuManager.Instance.OnBackPressed);
FriendsEssentialsModels.OnIncomingRequest += OnFriendRequestUpdated;
FriendsEssentialsModels.OnRequestCanceled += OnFriendRequestUpdated;
} -
受信したフレンドリクエストイベントを処理するために、
OnIncomingFriendRequest()という関数を作成します。これは、フレンドリクエストリストを更新します。private void OnFriendRequestUpdated(string userId)
{
if (!gameObject.activeSelf)
{
return;
}
LoadIncomingFriendRequests();
} -
SentFriendRequestsMenu_Starter.csを開き、OnRequestRejectedとOnRequestAcceptedイベントをリッスンするようにAwake()関数を変更します。以下のコードを追加します。private void Awake()
{
backButton.onClick.AddListener(MenuManager.Instance.OnBackPressed);
FriendsEssentialsModels.OnRequestRejected += OnFriendRequestUpdated;
FriendsEssentialsModels.OnRequestAccepted += OnFriendRequestUpdated;
} -
フレンドリクエスト更新イベントを処理するために、
OnFriendRequestUpdated()という関数を作成します。これは、送信済みフレンドリクエストリストを更新します。private void OnFriendRequestUpdated(string userId)
{
if (!gameObject.activeSelf)
{
return;
}
LoadOutgoingFriendRequests();
}
リソース
- このチュートリアルで使用されているファイルは、Unity Byte Wars GitHub リポジトリで入手できます。