

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将 Amazon GameLift Servers 与 Unity 游戏服务器项目集成
<a name="integration-unity-server-sdk4"></a>

**注意**  
本主题提供了适用于 Unity 的 Amazon GameLift Servers 插件的早期版本相关信息。版本 1.x 使用适用于 Amazon GameLift Servers 4.x 或更早版本的服务器 SDK。有关插件最新版本（使用服务器 SDK 5.x 并支持 Amazon GameLift Servers Anywhere 和托管式容器托管等新功能）的文档，请参阅[Amazon GameLift Servers适用于 Unity 的插件（服务器 SDK 5.x）](unity-plug-in.md)。

本主题可帮助您将托管在 Amazon GameLift Servers 上的自定义游戏服务器准备就绪。游戏服务器必须能够通知 Amazon GameLift Servers 自身状态，在提示时开始和停止游戏会话，以及执行其他任务。有关更多信息，请参阅 [借助服务器 SDK 将 Amazon GameLift Servers 添加到游戏服务器](gamelift-sdk-server-api.md)。

## 先决条件
<a name="integration-unity-server-sdk4-prereq"></a>

在集成游戏服务器之前，请完成以下任务：
+ [为 Amazon GameLift Servers 设置 IAM 服务角色](setting-up-role.md)
+ [安装并设置插件](unity-plug-in-sdk4.md#unity-plug-in-sdk4-install)

## 设置新的服务器进程
<a name="integration-unity-server-sdk4-server-process"></a>

**注意**  
本主题指的是适用于 Unity 的 Amazon GameLift Servers 插件版本 1.0.0（使用服务器 SDK 4.x 或更早版本）。

设置与 Amazon GameLift Servers 的通信，并报告服务器进程已准备好托管游戏会话。

1. 通过调用 `InitSDK()` 初始化服务器软件开发工具包。

1. 要让服务器做好接受游戏会话的准备，调用 `ProcessReady()` 以及连接端口和游戏会话位置的详细信息。包括 Amazon GameLift Servers 服务调用的回调函数的名称，例如 `OnGameSession()`、`OnGameSessionUpdate()`、`OnProcessTerminate()`、`OnHealthCheck()`。Amazon GameLift Servers 可能需要几分钟来提供回调。

1. Amazon GameLift Servers 将服务器进程的状态更新为 `ACTIVE`。

1. Amazon GameLift Servers 定期调用 `onHealthCheck`。

以下代码示例展示了如何使用 Amazon GameLift Servers 设置简单的服务器进程。

```
//initSDK
var initSDKOutcome = GameLiftServerAPI.InitSDK();
           
//processReady
// Set parameters and call ProcessReady
var processParams = new ProcessParameters(
    this.OnGameSession,
    this.OnProcessTerminate,
    this.OnHealthCheck,
    this.OnGameSessionUpdate,
    port,
    // Examples of log and error files written by the game server
    new LogParameters(new List<string>()          
        {
            "C:\\game\\logs",
            "C:\\game\\error"
        })
);
               
var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParams);
               
// Implement callback functions
void OnGameSession(GameSession gameSession)
{
    // game-specific tasks when starting a new game session, such as loading map
    // When ready to receive players
    var activateGameSessionOutcome = GameLiftServerAPI.ActivateGameSession();
}
               
void OnProcessTerminate()
{
    // game-specific tasks required to gracefully shut down a game session, 
    // such as notifying players, preserving game state data, and other cleanup
    var ProcessEndingOutcome = GameLiftServerAPI.ProcessEnding();
}
               
bool OnHealthCheck()
{
    bool isHealthy;
    // complete health evaluation within 60 seconds and set health
    return isHealthy;
}
```

## 启动游戏会话
<a name="integration-unity-server-sdk4-start-game-session"></a>

**注意**  
本主题指的是适用于 Unity 的 Amazon GameLift Servers 插件版本 1.0.0（使用服务器 SDK 4.x 或更早版本）。

游戏初始化完成后，您可以开始游戏会话。

1. 实现回调函数 `onStartGameSession`。Amazon GameLift Servers 调用此方法在服务器进程上启动新的游戏会话并接收玩家连接。

1. 要激活游戏会话，请调用 `ActivateGameSession()`。有关软件开发工具包的更多信息，请参阅[适用于 Amazon GameLift Servers 4.x 的 C\# 服务器 SDK – 操作](integration-server-sdk-csharp-ref-actions.md)。

以下代码示例说明了如何使用 Amazon GameLift Servers 启动游戏会话。

```
void OnStartGameSession(GameSession gameSession)
{
    // game-specific tasks when starting a new game session, such as loading map   
    ...
    // When ready to receive players   
    var activateGameSessionOutcome = GameLiftServerAPI.ActivateGameSession();
}
```

## 结束游戏会话
<a name="integration-unity-server-sdk4-end-game-session"></a>

**注意**  
本主题指的是适用于 Unity 的 Amazon GameLift Servers 插件版本 1.0.0（使用服务器 SDK 4.x 或更早版本）。

游戏会话结束时通知 Amazon GameLift Servers。最佳实操是在游戏会话完成后关闭服务器进程，以回收和刷新托管资源。

1. 设置一个名为 `onProcessTerminate` 的函数以接收来自 Amazon GameLift Servers 的请求并调用 `ProcessEnding()`。

1. 进程状态更改为 `TERMINATED`。

以下示例描述了如何结束游戏会话的进程。

```
var processEndingOutcome = GameLiftServerAPI.ProcessEnding();

if (processReadyOutcome.Success)
   Environment.Exit(0);

// otherwise, exit with error code
Environment.Exit(errorCode);
```

## 创建服务器生成包并上传到 Amazon GameLift Servers
<a name="integration-unity-server-sdk4-gamelift-connection"></a>

**注意**  
本主题指的是适用于 Unity 的 Amazon GameLift Servers 插件版本 1.0.0（使用服务器 SDK 4.x 或更早版本）。

将游戏服务器与 Amazon GameLift Servers 集成后，将生成包文件上传到实例集中，这样 Amazon GameLift Servers 就可以将其部署到游戏托管。有关如何将服务器上传到 Amazon GameLift Servers 的更多信息，请参阅[为 Amazon GameLift Servers 创建游戏服务器生成包](gamelift-build-cli-uploading.md)。