集成要求

注意:本页上的内容适用于 Unity Cloud 后台中的 Multiplay Hosting。如果您使用 Clanforge,请参阅 Clanforge 文档

为确保您可以使用 Multiplay Hosting 服务来托管和扩展游戏,您的游戏必须满足特定要求。请参阅以下指南,了解如何使您的游戏满足使用 Multiplay Hosting 的要求。

大多数要求与版本相关,具体来说,与版本可执行文件相关。版本包含运行游戏所需的所有文件。版本可执行文件是版本中的可执行文件。创建版本时,必须指定版本可执行文件。

注意:使用容器版本时,还需满足特殊的要求。请参阅容器版本要求

一般要求

本节介绍了为使用 Multiplay Hosting,版本必须满足的一般要求。请参阅以下要求,了解更多信息:

操作系统

版本可执行文件必须支持在 Linux (Ubuntu 20.04) 上运行。您可以在创建版本时指定版本支持的操作系统。

Multiplay Hosting 仅支持 64 位 Linux 应用程序。

注意:Multiplay Hosting 不支持基于 Windows 的操作系统。

参数化值

版本必须支持使用参数化值的信息。Multiplay Hosting 通过配置变量server.json file启动参数来管理参数化值。

您可以管理版本通过其版本配置跟踪的信息。

Multiplay Hosting 使用 server.json 文件来跟踪会话特定信息,例如分配 ID、端口号和要跟踪的任何其他变量(作为配置变量)。版本进程必须支持跟踪 server.json 文件中的信息,以便可以了解服务器何时变为已分配已取消分配状态。如果您使用的是 Unity 或 Unreal,可以使用 Game Server SDK 来实现。

版本还可以读取启动参数的信息。启动参数非常适合用于设置版本可执行文件启动时所需的值,例如游戏端口。

注意:建议使用但不要求必须支持启动参数和版本配置变量。您可以选择支持其中任一种或支持两者。

启动条件

版本必须支持在 server.json 文件中不填充分配 ID 的情况下启动。原因在于,服务器在线准备就绪可进行分配后,您才可以分配该服务器,这意味着,在分配该服务器之前,allocatedID 字段为空字符串 ("")。

网络适配器绑定

针对游戏服务器端口和查询协议服务器端口,版本必须绑定到 0.0.0.0

注意:如果尝试绑定到任何其他地址(包括外部可见的 IP 地址),可能会导致服务器无法访问或应用程序绑定失败。

动态端口号

版本必须支持使用动态端口号来进行游戏数据传输。Multiplay Hosting 按服务器实例生成端口号(使用偏移来确保服务器启动时不会出现端口冲突)。

注意:可以使用 8100 到 65355 范围内的任何端口。

版本可执行文件必须使用 $$port$$ 变量来利用此功能。例如,您可以使用以下启动参数,在启动时将 $$port$$ 变量传递给版本:

-port $$port$$

警告:Multiplay Hosting 不支持使用静态或硬编码的端口号。静态端口号可能一开始能够正常使用,但后续会导致产生冲突问题。

日志目录

版本必须支持为每个服务器实例生成日志。Multiplay Hosting 通过 Unity Cloud 后台展示服务器日志,可方便您查看、搜索和下载日志。

您可以通过启动参数和配置变量来控制版本保存日志文件的位置。例如,可以使用 -logFile 作为启动参数并传递 $$log_dir$$ 配置变量

-logFile $$log_dir$$/engine.log

日志目录要求可选择性满足。如果不设置日志目录,则无法通过 Unity Cloud 后台访问日志和崩溃转储。

提示:建议最好在服务器代码中设置日志轮替,以确保保留历史日志数据,而不会持续覆盖单个文件。您可以使用 $$timestamp$$ 变量来设置自动日志轮替。

注意:如果您使用的是 Unreal Engine ,日志目录必须与 Saved 目录相关。使用 Unreal Engine 的游戏还支持将 -userdir 作为启动参数,以便将崩溃和模式文件转发到类似的目录。

查询协议

尽管不作为一项要求,但也建议版本支持对服务器查询协议(例如 SQP)的查询做出响应。

服务器查询协议可方便查询服务器实例的信息,例如服务器状态和已分配玩家数。通常,响应中包含静态变量和动态(持续更新的)值。

Multiplay Hosting 依赖查询协议响应来确定服务器实例的运行状况。如果版本不支持查询协议或者您未正确设置查询协议,Multiplay Hosting 会判定服务器实例不响应。

此外,借助查询协议,Multiplay Hosting 可以报告和监控每个服务器的实时数据,例如并发连接玩家数 (CCU)、活动分配、失败分配、每个平台连接的玩家数以及服务器事件

提示:您可以使用 Game Server SDK 来实施服务器查询协议。

分配后清理

版本必须支持某种形式的分配后(会话后)清理,以便使服务器准备就绪用于下一次分配。

有两种可选方法:

  • 可以在游戏会话结束后返回大厅或就绪状态。
  • 可以正常退出进程(例如,使用退出代码 0)。

返回大厅(或就绪状态)更适合用于重新启动游戏服务器进程。在对战结束时结束游戏服务器进程并不是使用资源的最佳方法,因为重新启动通常比清理进程成本更高。

提示:请参阅 Game Server SDK,了解如何管理游戏服务器就绪

容器版本要求

创建 Multiplay Hosting 版本时,您可选择使用多种方式来上传版本文件。

一种方式是使用 Docker 和 Multiplay Hosting 容器注册表来上传版本的容器化版本。不过,版本容器必须满足特定要求(除一般要求外),您才能使用容器版本

使用基础镜像来创建容器版本

linux-build-image 模板容器可满足使用容器版本的大多数额外要求。因此,可在大多数情况下使用基础镜像。您可以通过将以下行添加到 Dockerfile 的顶部来使用基础镜像:

FROM unitymultiplay/linux-base-image:<tag>

<tag> 替换为要使用的基础镜像的版本。您可以查看 linux-base-image 标签,获取可用的标签列表。

从头开始创建容器版本

如果您希望从头开始创建 Dockerfile,则必须自行确保容器满足以下要求。

警告:除非在特定或高级使用场景中必须要从头开始创建容器,否则请使用基础镜像

要求描述
USER mpukgame容器必须使用 mpukgame 作为 USER。该用户必须具有组标识符 (GID) 2000 和用户标识符 (UID) 2000。
ENTRYPOINT容器必须具有 ENTRYPOINT,由 mpukgame 用户启动。

以下代码块展示了可满足这些要求的简单 Dockerfile

# ======================================================== #
#                  Unity base image stuff                  #
# ======================================================== #

FROM ubuntu:20.04 AS mpuk

RUN addgroup --gid 2000 mpukgame && \
    useradd -g 2000 -u 2000 -ms /bin/sh mpukgame && \
    mkdir /game && \
    chown mpukgame:mpukgame /game && \
    apt update && \
    apt upgrade && \
    apt install -y ca-certificates
USER mpukgame

# ======================================================== #
#                    Custom game stuff                     #
# ======================================================== #

FROM mpuk AS game

# copy game files here
# for example:
WORKDIR /game
COPY --chown=mpukgame . .

# set your game binary as the entrypoint
ENTRYPOINT [ "./gamebinary" ]