フレンドリクエストに SDK を使用する - フレンドを追加する - (Unity モジュール)
注釈:本資料はAI技術を用いて翻訳されています。
ラッパーを開く
このチュートリアルでは、AccelByte Gaming Services (AGS) Game SDK を使用して、フレンドリクエストリストの表示、送信済みフレンドリクエストリスト、フレンドリクエストの承認、拒否、送信済みフレンドリクエストのキャンセルを行う方法を学びます。Byte Wars には、FriendsEssentialsWrapper.cs という名前の SDK ラッパーがすでに作成されています。このラッパーのスターターバージョンを使用して、フレンド機能をゼロから実装します。
スターターパックの内容
このチュートリアルを開始するには、FriendsEssentialsWrapper_Starter というフレンドエッセンシャルラッパーのスターターバージョンを見つけます。このクラスには、すでに実装されているいくつかの機能が含まれています。プレイヤー検索機能を完成させるために、このクラスにさらに機能を追加します。
- C# ファイル:
Assets/Resources/Modules/Social/FriendsEssentials/Scripts/FriendsEssentialsWrapper_Starter.cs
また、ヘルパー定数変数と構造体を含む FriendsEssentialsModels モデルクラスもあり、以下のファイルで定義されています。
- C# ファイル:
Assets/Resources/Modules/Social/FriendsEssentials/Scripts/LeaderboardEssentialsModels.cs
FriendsEssentialsWrapper_Starter クラスには、いくつかの機能があります。
-
プレイヤーのフレンドリストが変更されたときに他のオブジェクトに通知し、それに応じて何かを実行できるようにする
ObservableListプロパティ。public ObservableList<string> CachedFriendUserIds { get; private set; } = new ObservableList<string>(); -
プレイヤーの詳細を取得するための AGS Game SDK クラスは、
User、Lobby、UserProfilesです。これらのコード行はFriendsEssentialsWrapper_Starterにあります。private static ApiClient ApiClient => AccelByteSDK.GetClientRegistry().GetApi();
private User user;
private UserProfiles userProfiles;
private Lobby lobby;
FriendsEssentialsModels クラスには、いくつかの機能があります。
-
受信したフレンドリクエストの処理方法(承認または拒否)を委任します。
public static Action<string> OnIncomingRequest = delegate { };
public static Action<string> OnRequestCanceled = delegate { };
public static Action<string> OnRequestRejected = delegate { };
public static Action<string> OnRequestAccepted = delegate { };
受信したフレンドリクエストの取得を実装する
受信したフレンドリクエストを取得する機能を実装するには、FriendsEssentialsWrapper_Starter.cs を開き、LoadIncomingFriendRequests という関数を作成します。この関数は、Lobby サービスからすべての受信フレンドリクエストを取得し、CachedFriendUserIds リストに保存します。
public void LoadIncomingFriendRequests(ResultCallback<Friends> resultCallback)
{
lobby.ListIncomingFriends(result =>
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error loading incoming friend requests, " +
$"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
BytewarsLogger.Log("Successfully loaded incoming friend requests");
CachedFriendUserIds.Add(result.Value.friendsId);
}
resultCallback?.Invoke(result);
});
}
送信したフレンドリクエストの取得を実装する
送信したフレンドリクエストを取得する機能を実装するには、FriendsEssentialsWrapper_Starter.cs を開き、すべての送信フレンドリクエストをクエリする LoadOutgoingFriendRequests という新しい関数を作成します。
public void LoadOutgoingFriendRequests(ResultCallback<Friends> resultCallback = null)
{
lobby.ListOutgoingFriends(result =>
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error loading outgoing friend requests, " +
$" Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
BytewarsLogger.Log("Successfully loaded outgoing friend requests");
CachedFriendUserIds.Add(result.Value.friendsId);
}
resultCallback?.Invoke(result);
});
}
フレンドリクエストのキャンセル、拒否、承認を実装する
このセクションでは、送信者がフレンドリクエストをキャンセルし、受信者がフレンドリクエストを拒否または承認できるようにする方法を学びます。次の手順に従ってください。
-
CancelFriendRequests()という関数を作成します。この関数は、AGS Game SDK Lobby のCancelFriendRequestを呼び出し、ローカルユーザーからターゲットユーザーへのフレンドリクエストをキャンセルします。public void CancelFriendRequests(string userId, ResultCallback resultCallback)
{
lobby.CancelFriendRequest(userId, result =>
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error canceling friend request, " +
$"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
BytewarsLogger.Log($"Successfully canceled outgoing friend request with User Id: {userId}");
CachedFriendUserIds.Remove(userId);
}
resultCallback?.Invoke(result);
});
} -
DeclineFriend()という関数を作成します。この関数は、AGS Game SDK Lobby のRejectFriendを呼び出し、ターゲットユーザーが受信したフレンドリクエストを拒否します。public void DeclineFriend(string userId, ResultCallback resultCallback)
{
lobby.RejectFriend(userId, result =>
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error declining friend request, " +
$"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
BytewarsLogger.Log($"Successfully rejected friend request with User Id: {userId}");
CachedFriendUserIds.Remove(userId);
}
resultCallback?.Invoke(result);
});
} -
FriendsEssentialsWrapper_Starter.csを開き、AcceptFriend()という関数を作成します。この関数は、AGS Game SDK Lobby のAcceptFriendを呼び出し、ターゲットユーザーが受信したフレンドリクエストを承認します。public void AcceptFriend(string userId, ResultCallback resultCallback)
{
lobby.AcceptFriend(userId, result =>
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error accepting friend request, " +
$"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
BytewarsLogger.Log($"Successfully accepted friend request with User Id: {userId}");
CachedFriendUserIds.Add(userId);
}
resultCallback?.Invoke(result);
});
}
フレンドリクエストイベントをリッスンする
プレイヤーがフレンドリクエストを承認、拒否、またはキャンセルしたときに、受信または送信フレンドリクエストリストを即座に更新することが重要です。これを行うには、AGS Game SDK が提供する通知イベントを使用します。
このセクションでは、OnIncomingFriendRequest、FriendRequestRejected、FriendRequestAccepted イベント通知をリッスンする方法を学びます。これらのイベントは AGS Game SDK を通じて利用でき、さまざまなフレンドリクエストのやり取りを処理するために使用できます。
フレンドリクエストイベントをリッスンするには、次の手順に従ってください。
-
FriendsEssentialsWrapper_Starter.csを開き、受信したフレンドリクエストをリッスンするOnIncomingFriendRequestという関数を作成します。この関数はOnIncomingRequestイベントを呼び出し、後で UI スクリプトハンドラーで使用されます。private void OnIncomingFriendRequest(Result<Friend> result)
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error receiving incoming friend request notification, " +
$"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
BytewarsLogger.Log($"Incoming friend request from {result.Value.friendId}");
CachedFriendUserIds.Add(result.Value.friendId);
FriendsEssentialsModels.OnIncomingRequest?.Invoke(result.Value.friendId);
} -
キャンセルされたフレンドリクエストをリッスンする
OnFriendRequestCanceledという関数を作成します。この関数はOnRequestCanceledイベントアクションを呼び出し、後で UI スクリプトハンドラーで使用されます。private void OnFriendRequestCanceled(Result<Acquaintance> result)
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error receiving friend request canceled notification, " +
$"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
BytewarsLogger.Log($"Friend request from {result.Value.userId} has been canceled");
CachedFriendUserIds.Remove(result.Value.userId);
FriendsEssentialsModels.OnRequestCanceled?.Invoke(result.Value.userId);
} -
拒否されたフレンドリクエストをリッスンする
OnFriendRequestRejectedという関数を作成します。この関数はOnRequestRejectedイベントアクションを呼び出し、後で UI スクリプトハンドラーで使用されます。private void OnFriendRequestRejected(Result<Acquaintance> result)
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error receiving friend request rejected notification, " +
$"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
BytewarsLogger.Log($"Friend request from {result.Value.userId} has been rejected");
CachedFriendUserIds.Remove(result.Value.userId);
FriendsEssentialsModels.OnRequestRejected?.Invoke(result.Value.userId);
} -
承認されたフレンドリクエストをリッスンする
OnFriendRequestAcceptedという関数を作成します。この関数はOnRequestAcceptedイベントアクションを呼び出し、後で UI スクリプトハンドラーで使用されます。private void OnFriendRequestAccepted(Result<Friend> result)
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error receiving friend request accepted notification, " +
$"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
BytewarsLogger.Log($"Friend request from {result.Value.friendId} has been accepted");
CachedFriendUserIds.Add(result.Value.friendId);
FriendsEssentialsModels.OnRequestAccepted?.Invoke(result.Value.friendId);
} -
フレンドリクエストイベントをリッスンする関数を作成したので、これらの関数を AGS Game SDK に登録する必要があります。これを行うには、
FriendsEssentialsWrapper_Starter.csスクリプトのAwake()関数に以下のハイライトされたコードを追加します。private void Awake()
{
//...
lobby.OnIncomingFriendRequest += OnIncomingFriendRequest;
lobby.FriendRequestCanceled += OnFriendRequestCanceled;
lobby.FriendRequestRejected += OnFriendRequestRejected;
lobby.FriendRequestAccepted += OnFriendRequestAccepted;
} -
フレンドリクエストイベントをリッスンする関数を登録した後、スクリプトが破棄されるときにこれらの関数の登録を解除する必要があります。これを行うには、
FriendsEssentialsWrapper_Starter.csスクリプトのOnDestroy()関数に以下のハイライトされたコードを追加します。private void OnDestroy()
{
lobby.OnIncomingFriendRequest -= OnIncomingFriendRequest;
lobby.FriendRequestCanceled -= OnFriendRequestCanceled;
lobby.FriendRequestRejected -= OnFriendRequestRejected;
lobby.FriendRequestAccepted -= OnFriendRequestAccepted;
}