友達とゲームをしたり、オンラインで新しいプレイヤーに会ったりすることは、多くのオンライン サービスの重要な部分です。 フレンド インターフェース には、他のユーザーの追加、削除、ブロックなど、ユーザーのソーシャル コンタクト リストを管理する機能が含まれています。
フレンドを管理する
フレンド リストはオンライン サービスのサーバーにあり、セッション中に、フレンドが追加または削除される、ゲームやセッションに参加および退出する、サービスにログインおよびログアウトするときに変更できます。 そのため、これらのリストを管理するには、サーバーに最新の情報をクエリし、その情報をキャッシュしてゲームで使用する必要があります。
フレンド リストを取得する
ユーザーのフレンド リストを処理するための最初のステップは通常、ReadFriendsList を呼び出して、指定されたローカル ユーザーに属する名前付きのフレンド リストの最新バージョンを取得することです。
有効なリスト名は EFriendsList 列挙型で見つかります。これは、提供されている ToString 関数によって文字列に変換できます。
リモート マシンにクエリを実行することから、ReadFriendsList は非同期的で、完了すると FOnReadFriendsListComplete タイプのデリゲートを呼び出します。
成功すると、この呼び出しはリストをキャッシュします。したがって、後でリモート マシンを繰り返しクエリしたり、開発者が独自のキャッシュ コードを記述したりすることなく、リストを調べることができます。
また、リスト上のユーザーのプレゼンス ステータス データも更新されます。
FOnReadFriendsListComplete によって返されるデータには、ReadFriendsList 操作の成功または失敗に関する情報のみが含まれます。
フレンド リストを調べる
ReadFriendsList の呼び出しが成功してリストを取得してキャッシュした後、開発者は GetFriendsList でリスト自体のコピーを取得したり、GetFriend でリストから個々のフレンドを取得したりできます。
さらに、既知のユーザーの FUniqueNetId を IsFriend 関数に渡して、そのユーザーの指定されたリストをチェックすることもできます。
フレンド リストは、新しいプレイヤーとの出会いなどのゲーム内イベント、およびユーザーが別のシステムからアカウントを変更するなどのゲーム外イベントの両方から、いつでも変更が可能です。
キャッシュされたリストを最新の状態に保つには、ReadFriendsList の呼び出しを検討してみてください。
フレンドを招待する
SendInvite 関数は、ユーザーの FUniqueNetId で識別される別のユーザーに招待状を送信します。
承認されると、ユーザーはオンライン サービスによって指定されたリストに追加されます。
この操作が完了すると、FOnSendInviteComplete タイプのデリゲートが呼び出されます。しかしこれは、招待が送信された (または送信に失敗した) ことだけを意味し、意図した受信者が招待を受け取ったり応答したりしたことを意味するわけではありません。
一部のオンライン サービスには、招待状を送信するためのカスタム ユーザー インターフェースがあり、SendInvite が呼び出されると自動的に開く場合があります。
すべての SendInvite の呼び出しは最終的に FOnSendInviteComplete デリゲートをトリガーします。
これには、外部 UI が開かれ、ユーザーがそれをキャンセルする場合も含まれます。
招待を承認または拒否する
別のユーザーからの招待が届くと、送信者と受信者の FUniqueNetId を含む FOnInviteReceivedDelegate タイプのデリゲートが呼び出されます。
招待されたユーザーは、新しいフレンドが表示されるリストの名前を指定して、AcceptInvite や RejectInvite を呼び出して応答できます。
AcceptInvite は、操作の結果を通信するために FOnAcceptInviteComplete タイプのデリゲートを使用しますが、RejectInvite は FOnRejectInviteComplete デリゲートを使用します。
フレンド リストを削除する
オンライン サービスでは、非同期 DeleteFriendsList 関数を通じてフレンド リストを削除するように指示できます。
完了すると、FOnDeleteFriendsListComplete タイプのデリゲートが呼び出されます。
フレンドを削除する
ローカル ユーザーに属するリストからフレンドを削除するには、DeleteFriend 関数を呼び出します。
操作が完了すると、FOnDeleteFriendComplete タイプのデリゲートが呼び出されます。
一部のオンライン サービスでは、フレンドが複数のリストに存在する可能性があります。その場合、この関数は指定されたリストからのみフレンドを削除します。
オンラインで会ったプレイヤーへの対応
オンライン サービスでは、公開ゲーム セッションなどでユーザーが最近会ったものの、フレンド リストに追加またはブロックしていないプレイヤーのリストが別途保持されることがよくあります。 フレンド リストと同様に、最近会ったプレイヤーのリストは、オンライン サービスにクエリを実行してリストをキャッシュすることによって処理されます。
最近会ったプレイヤーのリストを取得する
QueryRecentPlayers はオンライン サービスに非同期呼び出しを行い、完了時に FOnQueryRecentPlayersComplete タイプのデリゲートを呼び出します。
成功した場合、フレンド インターフェースはリストをローカルにキャッシュします。
最近会ったプレイヤーを調べる
QueryRecentPlayers の呼び出しが成功し、最近会ったプレイヤーのリストが取得されると、GetRecentPlayers 関数はキャッシュされた配列を返します。
配列の個々の要素には、ユーザーのデータと、プレイヤーが最後にオンラインになった日時を示す関数が含まれています。
ブロック リストを管理する
多くのオンライン サービスで、ユーザー自身が特定の他のユーザーに対して、サービスを通じて自分に連絡したり、一緒に遊んだりすることを禁止する機能が用意されています。 フレンド インターフェースでは、ブロックされたユーザーのリストを取得してキャッシュできるほか、オンライン サービスのブロック機能とブロック解除機能も利用できます。
現在ブロックされているユーザーをリストする
ブロックされたユーザーのリストを取得するには、QueryBlockedPlayers 関数を呼び出します。
この関数は非同期であり、完了すると FOnQueryBlockedPlayersComplete タイプのデリゲートを呼び出します。
さらに、ブロックされたユーザーのリストに変更が加えられた場合は、FOnBlockListChange デリゲートを通じて通知されます。
ユーザーのブロックとブロック解除
BlockPlayer および UnblockPlayer 関数は、オンライン サービスに対して非同期呼び出しを行い、FUniqueNetId によって識別される特定のプレイヤーをローカル プレイヤーによってブロックまたはブロック解除するように要求します。
これらの操作が完了すると、それぞれ FOnBlockedPlayerComplete および FOnUnblockedPlayerComplete のデリゲートを通じて成功または失敗の情報が返されます。