EOS のプラットフォーム実装

コンソールで EOS SDK を実装するためのガイドラインと参考情報です。

Epic Online Services (EOS) SDK を実行するには、ターゲット プラットフォームで EOS ランタイムを確実にロードして実行するために、プロジェクトの関連付け、パッケージ化、ロードのプロセスにおいて、前提条件となる複数の手順に従う必要があります。このページでは、上記のプロセスに関する一般的な情報を提供し、「プラットフォーム別のドキュメント」ではプラットフォームごとの要件についてより具体的な情報を提供します。また、このページでは EOS SDK で Unreal Build System を使用する方法についても扱います。

EOS SDK とコンソール (PlayStation、Xbox、Nintendo Switch など) に関するドキュメントについては、組織アクセスを設定 すると、ファーストパーティ認証後にドキュメントが SDK の中に含まれます。

スレッド セーフ

SDK はスレッドセーフとはみなされません。

EOS SDK 呼び出しが同じスレッドではない場合、必ず自分の呼び出しを調整し同期してください。

ビルドする

すべての EOS SDK ヘッダは eos_base.h ヘッダをインクルードしますが、eos_base.h を呼び出すために追加設定が必要となるプラットフォームもあります。追加設定が必要な各プラットフォームは「プラットフォーム別のドキュメント」の中に記載されており、この追加設定用の <Platform>/eos<Platform>base.h があります。

eos_platform_prereqs.h を使用する

EOS SDK は、クロスプラットフォーム開発をサポートするために eos_platform_prereqs.h を提供しています。eos_platform_prereqs.h を使用するには、特定のプラットフォームを含むために必要なアプリケーションをビルドするときに EOS_BUILD_PLATFORM_NAME マクロを追加します。

その他の EOS SDK ヘッダの前に eos_platform_prereqs.h ヘッダをインクルードします。

たとえば、Unreal Build System を使用している場合は、<Project>.Build.cs ファイルに次のコードを追加します。

if (!Target.IsInPlatformGroup(UnrealPlatformGroup.Windows) &&
    !Target.IsInPlatformGroup(UnrealPlatformGroup.Unix) &&
    !Target.IsInPlatformGroup(UnrealPlatformGroup.Apple) &&
    !Target.IsInPlatformGroup(UnrealPlatformGroup.Android))
{
    AppendStringToPublicDefinition("EOS_BUILD_PLATFORM_NAME",
        Target.Platform.ToString());
}

別の EOS インターフェースを使用するときは、次の #includes を追加します。

#include "eos_platform_prereqs.h"
#include "eos_sdk.h"
#include "eos_[interface]_types.h"

eos[interface]types.h の部分は、[interface] を使用するインターフェースに置き換えます。

#include "eos_friends_types.h"
#include "eos_auth_types.h"
#include "eos_lobby_types.h"

カスタム クロスプラットフォームの例

eos_platform_prereqs.h がプロジェクトのビルド システムに合わない場合は、カスタム コンパイラから提供されるマクロを参照することができます。以下はその例です。

#if defined(__THECOMPILER__)
#include "ThePlatform/eos_ThePlatform_base.h"
#elif defined(__SOMECOMPILER__)
#include "SomePlatform/eos_SomePlatform_base.h"
#endif
#include "eos_sdk.h"
#include "eos_friends_types.h"

単一プラットフォームの例

単一プラットフォームが EOS フレンド サービス用に追加の #includes が必要な場合は以下を使用します。

#include "ThePlatform/eos_ThePlatform_base.h"
#include "eos_sdk.h"
#include "eos_[interface]_types.h"

eos[interface]types.h の部分は、[interface] を使用するインターフェースに置き換えます。

#include "eos_friends_types.h"
#include "eos_auth_types.h"
#include "eos_lobby_types.h"

リンクする

プロジェクトをリンクする際は、EOS SDK のリンクタイム ライブラリを、プロジェクトのリンク コマンドに追加する必要があります。ほとんどのプラットフォームでは、ランタイム ライブラリの手動ロードも必要となります。

Unreal Build System とリンクする

Unreal Engine を使用している場合、「&lt;Project>.Build.cs」ファイルで以下の手順に従うと Unreal Build Tool でライブラリのリンクとパッキングを管理できます。

  1. ライブラリのリンクタイム名を PublicAdditionalLibraries に追加します。

  2. ライブラリのリンクタイム ファイルを RuntimeDependencies に追加します。

たとえば、「&lt;Project>.Build.cs」ファイルに以下のようなコードを追加します。

PublicAdditionalLibraries.Add(LibraryLinkName);
string RuntimeLibrarySourcePath = Path.Combine(SDKBinariesDir, RuntimeLibraryFileName);
string RuntimeLibraryTargetPath = Path.Combine(ProjectBinariesDir, RuntimeLibraryFileName);
RuntimeDependencies.Add(RuntimeLibraryTargetPath, RuntimeLibrarySourcePath, StagedFileType.NonUFS);

パッケージ化する

一般的には、ゲームの実行ファイルと同じディレクトリに EOS SDK のランタイム ライブラリを配置することで、ゲームの実行時にライブラリが確実に見つかるようになります。一部のプラットフォームでは、ライブラリを指定のディレクトリに配置する必要があります。詳細はプラットフォーム固有のページを確認してください。

ロードする

一部のプラットフォームでは、ランタイム時に EOS SDK のダイナミック モジュールを明示的にロードする必要があります。各プラットフォームでこれを行う詳しい方法については、プラットフォーム固有のページを参照してください。プロセスが示されていない場合は明示的なロードは必要ありません。

Unreal でロードする

Unreal Build Tool を使用してゲームのパッケージ化を設定する限り、すべてのプラットフォームで同じプロセスを使用できます。モジュールのロードは FPlatformProcess::GetDllHandle を使用し、モジュールのアンロードは FPlatformProcess::FreeDllHandle を使用します。

メモリ関数

EOS SDK では、EOS_InitializeOptions を介してカスタム アロケータを提供するときに、開発したメモリ管理システムを使用することができます。アロケータが提供されない場合は、EOS SDK は mallocfreerealloc などの標準アロケータを使用します。

ただしコンソールは例外で、カスタム アロケータが必要となります。コンソールでのメモリ管理は複雑であり、プラットフォーム依存の高いプロセスです。予期せぬ挙動を防ぐため、コンソールではすべてのメモリ管理が確実にアプリケーションから行われるように、これらのカスタム アロケータの提供が必要とされています。現在のプラットフォームにおけるメモリ管理機能の詳細については、SDK ドキュメントの冒頭の部分を参照してください。

Unreal でのメモリ関数

Unreal Engine で EOS SDK を使用する場合、EOS_InitializeOptions に提供されるアロケータを FMemory::MallocFMemory::ReallocFMemory::Release にマップすることができます。

プラットフォーム別のドキュメント

以下のリンクは、ここまでのプロセスを各プラットフォームで行うためのガイドラインです。