ゲーム セッションに接続し、インターネット経由で他のプレイヤーとやり取りするには、通常、サードパーティのオンライン サービスに登録されたアカウントにログインする必要があります。 これらのサービスは、ソーシャル メディア サイト、ハードウェア プラットフォームの所有者、またはゲーム サービスによって実行できます。 Unreal Engine (UE) では、ID インターフェース がこれらのサービスとのアカウント関連のやり取りを処理し、ユーザーを認証してアクセス トークンを取得する機能を提供します。
認証関数
ログイン
Login
関数は、ローカル プレイヤーのアカウント資格情報 (FOnlineAccountCredentials
) を取得し、オンライン サービスへのログインを試みます。
アカウント資格情報を自動的に生成したり、コマンドライン引数から生成したりするには、代わりに AutoLogin
関数を呼び出すことができます。
オンライン サービスが応答すると、ログイン試行が成功したか失敗したかに関係なく、FOnLoginCompleteDelegate
が呼び出されます。
さらに、特定のローカル プレイヤーのログイン ステータスが変更されるたびに、FOnLoginStatusChangedDelegate
が呼び出されます。
各ローカル ユーザーは個別にログインします。 これは、ローカル マルチプレイヤーのゲームでは特に重要となります。それにより、プレイヤーはオンラインでの競争、リーダーボードでのスコア獲得、フレンドの招待、自分の個別のアカウント名での実績獲得が可能となります。
Login
の呼び出しが失敗した場合、ExternalUI インターフェースは、オンライン サービスの組み込みユーザー インターフェースを通じてユーザーに手動でログインする機会を与えます。
すべてのオンライン プラットフォームが認証プロセスの一部として FOnlineAccountCredentials
を使用するわけではありません。場合によっては、組み込みのユーザー インターフェースが唯一サポートされているログイン方法であることもあります。
ログアウト
ユーザーをオンライン サービスからログアウトするには、Logout
関数を使用します。
アクションが完了すると、FOnLogoutCompleteDelegate
が呼び出されます。
さらに、特定のローカル プレイヤーのログイン ステータスが変更されるたびに、FOnLoginStatusChangedDelegate
が呼び出されます。
現在のログイン ステータスを確認する
ローカル プレイヤーは、オンラインでログインするか、ローカル プロファイルにログインする (ただしオンラインでない) か、まったくログインしないかのいずれかになります。
プレイヤーの現在のステータスを確認するには、GetLoginStatus
関数を使用します。
ログイン ステータスはオンライン サービスとの最新の通信に基づいて決定されます。したがって、バインドするデリゲートはありません。
ただし、プレイヤーのログインなど、特定のステータスの変更を待機していて、この関数を定期的にポーリングしたくない場合は、FOnLoginStatusChangedDelegate
のバインディングが役立ちます。
一部のシステムでは、ユーザーは物理入力デバイスを別のプレイヤーに再割り当てすることができます。割り当てすると、Unreal Engine 内のローカル プレイヤー インデックス値が変更されます。
これにより、ユーザーのログイン ステータスを実際に変更することなく、ログインしているユーザーのローカル ユーザー インデックス値を切り替えることができます。
この場合、OnControllerPairingChanged
デリゲートが呼び出され、コントローラーのインデックスと関係するユーザーの FUniqueNetId
値が提供されます。
プレイヤーの ID と情報
ID システム間の変換
Unreal Engine のネットワーク環境では、ログイン試行が成功すると、不透明型の FUniqueNetId
値がローカル プレイヤーに自動的に関連付けられます。
これは、Unreal Engine のネットワーク コード全体で使用されるだけでなく、各オンライン サービスの独自の ID データ タイプを抽象化するためのものとしても機能します。
ユーザーの FUniqueNetId
を複製する必要がある場合、FUniqueNetIdRepl
は FUniqueNetId
をレプリケーションセーフな文字列に変換する ToString
メソッドを提供します。この文字列は CreateUniquePlayerId
によって元に戻すことができます。
ID インターフェースには、これらの異なるシステムと ID タイプ間のギャップを埋めるための機能がいくつかあります。
プレイヤーの FUniqueNetId
を取得するには、そのプレイヤーのサービス固有の ID を使用して CreateUniquePlayerId
を呼び出すか、プレイヤーのローカル ユーザー インデックスを使用して GetUniquePlayerId
を呼び出すことができます。
プレイヤーの FUniqueNetId
を使用すると、GetPlatformUserIdFromUniqueNetId
を呼び出してプレイヤーのサービス固有の ID (タイプ FPlatformUserId
) を取得できます。しかし、ほとんどの場合これが必要となることはありません。
これらの関数はすべてローカルで利用可能な情報を使用するため、デリゲートやコールバックは関与しません。
GetSponsorUniquePlayerId
はスポンサー プレイヤーの FUniqueNetId
を返しますが、この関数は Xbox Live サービスに対してのみ実装されています。
ユーザーアカウント情報
抽象クラス FOnlineUser
は、任意のオンライン サブシステムに関連するユーザー アカウントの基本情報を表します。また、これはローカル ユーザーまたはリモート ユーザーが公開できる情報にアクセスするための共通インターフェースとして機能します。
このクラスの拡張である FUserOnlineAccount
は、ログインしているローカル ユーザーが利用できるすべての情報へのアクセスを提供します。
場合によっては、オンライン システムの FOnlineUser
子クラスは、特定のオンライン サービスのニーズに合わせて拡張されることがあります。
基本クラスは、ユーザーの FUniqueNetId
、実名、表示名 (使用されているオンライン サービスによって異なります)、およびユーザーに関連付けられている可能性のある文字列ベースの属性を返す機能をサポートしていますが、これらの属性の格納は子クラスで実装する必要があります。
FUserOnlineAccount
クラスも抽象的ですが、ユーザー属性を設定し、サービス固有のアクセス トークンやその他のデータなど、ローカルのログイン ユーザーに関するメタデータを保存するためのフレームワークを確立します。
一部のサブシステムはこれらのトークンを使用して機能にアクセスし、それらを使用して RESTful 呼び出しを実行したり、独自のバックエンド サービスと調整したりできます。
ローカルで既知のアカウントを取得する
多くのオンライン サービスでは、ローカル マシンからログインした (またはローカル マシン上で作成された) ユーザー アカウントを追跡します。
これを実行するサービスの場合、既知のアカウントすべてをリストする配列を返す関数 GetAllUserAccounts
が実装されます。
これらのアカウントは FUserOnlineAccount
データとして返されます。
特定のプレイヤーがリストにあるかどうかを確認するには、GetUserAccount
を呼び出します。それにより、プレイヤーの FUniqueNetId
を既知の FUserOnlineAccount
(リスト内に存在する場合) にマッピングすることができます。
プレイヤーのディスプレイ ネーム
一部のオンライン サービスでは、ユーザーがアカウントのログイン名とは異なる「ディスプレイ ネーム」または「ニックネーム」を入力できるオプションが提供されています。
この名前は、ゲームのチャット、スコアボード、キャラクター ラベル、または同様のユーザー向け表示で使用する場合、アカウント名よりも優先される場合があります。
プレイヤーの FOnlineUser
を使用し、ローカルにキャッシュされたユーザー アカウント データからそのプレイヤーの表示名またはニックネームを取得する GetDisplayName
を呼び出します。
ユーザー権限
オンライン サービスはゲートウェイとして機能し、特定のオンライン機能 (最も顕著なのは他のサービス ユーザーとオンラインでゲームをプレイする機能) へのアクセスを許可または拒否します。
GetUserPrivilege
関数は、ユーザーが特定の権限 (EUserPrivileges
で定義) を持っているかどうかを報告します。
この関数はオンライン サービスに接続する必要があり、FOnGetUserPrivilegeCompleteDelegate
を通じてユーザー要求に応答し、EPrivilegeResults
型の結果を返します。