EOS的平台实现

关于在主机上实现EOS SDK的指南和参考。

要运行 Epic在线服务 (EOS)SDK,必须执行项目链接、打包和加载流程中的数个前提步骤,确保目标平台加载并运行EOS运行时。本页提供此类流程的一般信息,而平台专属文档下列示的页面更详细地讲述了各平台需求的相关信息。本页还介绍如何通过EOS SDK使用 虚幻编译系统

有关EOS SDK以及主机平台(PlayStation、Xbox、任天堂Switch等)的文档,你必须配置你的组织获取(organization access),文档将在第一方批准后,成为SDK投放的一部分。

线程安全

EOS 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 头文件。

例如,如果你在使用虚幻编译系统,请在你的 <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的链接时间库添加至项目的链接命令。大部分平台还需要手动加载运行时间库。

使用虚幻编译系统进行链接

使用 虚幻引擎 时,若遵循 <Project>.Build.cs 文件中的以下步骤,虚幻编译工具 将管理库的链接和打包:

  1. 将库的链接时间名称添加至 PublicAdditionalLibraries

  2. 将库的链接时间文件添加至 RuntimeDependencies

例如,<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的动态模块。欲了解各平台此类相关信息,参见平台专属页面。若未注明流程,则无需显式加载。

内存函数

当你通过 EOS_InitializeOptions 提供自定义分配器时,EOS SDK可以使用你开发的任意内存管理系统。如果没有提供分配器,EOS SDK会使用标准的分配器,比如 mallocfree 以及 realloc

不过,主机属于例外,它们需要自定义分配器。主机上的内存管理流程既复杂又高度依赖平台。为了防止任何意外行为,主机需要提供这些自定义分配器,以便确保所有的内存管理都由应用程序进行。关于内存管理在你的当前平台上的工作原理的详细解释,请参考第一方SDK文档。

使用虚幻加载

凡使用虚幻编译工具设置游戏打包,所有平台皆可使用同一流程。使用 FPlatformProcess::GetDllHandle 加载模块,使用 FPlatformProcess::FreeDllHandle 卸载模块。

虚幻的内存函数

虚幻引擎结合EOS SDK使用时,提供给 EOS_InitializeOptions 的分配器可映射至 FMemory::MallocFMemory::ReallocFMemory::Release

平台专属文档

以下链接是特定平台的上述流程指南: