友達とゲームをしたり、オンラインで新しいプレイヤーに会ったりすることは、多くのオンライン サービスの重要な部分です。 フレンド インターフェース には、他のユーザーの追加、削除、ブロックなど、ユーザーのソーシャル コンタクト リストを管理する機能が含まれています。
フレンドを管理する
フレンド リストはオンライン サービスのサーバーにあり、セッション中に、フレンドが追加または削除される、ゲームやセッションに参加および退出する、サービスにログインおよびログアウトするときに変更できます。 そのため、これらのリストを管理するには、サーバーに最新の情報をクエリし、その情報をキャッシュしてゲームで使用する必要があります。
フレンド リストを取得する
ユーザーのフレンド リストを処理するための最初のステップは通常、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
のデリゲートを通じて成功または失敗の情報が返されます。