

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

# 将 FlexMatch 添加到 Amazon GameLift Servers 托管的游戏服务器
<a name="match-server"></a>

当 Amazon GameLift Servers 创建对战时，它会生成一组对战结果数据，这些数据描述了关键的对战细节，包括团队分配。游戏服务器在开始新的游戏会话时，使用这些数据以及其他游戏会话信息来托管对战。

**对于使用 Amazon GameLift Servers 托管的游戏服务器**  
Amazon GameLift Servers 会提示游戏服务器进程启动游戏会话。它会提供一个 [GameSession](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_GameSession.html) 对象，其中描述了要创建的游戏会话类型，并包含特定于玩家的信息，包括对战数据。

**对于托管在其他解决方案上的游戏服务器**  
成功完成对战请求后，Amazon GameLift Servers 会发出包含匹配结果的事件。您可以将此数据与您自己的托管解决方案一起使用，以启动托管对战的游戏会话。



## 关于对战构建器数据
<a name="match-server-data"></a>

对战数据包含以下信息：
+ 唯一的对战 ID
+ 用于创建对战的对战配置的 ID
+ 被选中参加对战的玩家
+ 团队名称和团队分配
+ 用来组成对战的玩家属性值。属性还可能提供指导如何设置游戏会话的信息。例如，游戏服务器可能会根据玩家属性为玩家分配角色，或者选择所有玩家通用的游戏地图首选项。或者，您的游戏可能会根据玩家的平均技能水平解锁某些功能或关卡。

对战数据不包括玩家延迟。如果您需要当前玩家的延迟数据（如对战回填），建议您获取最新数据。

**注意**  
对战构建器数据指定完整的对战配置 ARN，此 ARN 将标识配置名称、AWS 账户和区域。对于使用 Amazon GameLift Servers 托管的游戏，如果您使用了对战回填，则只需配置名称即可。配置名称是紧接在“:matchmakingconfiguration/”之后的字符串。在以下示例中，对战配置名称为“MyMatchmakerConfig”。

此 JSON 示例显示了典型的对战构建器数据集。示例中描述了一款双人游戏，玩家根据其技能评级和已达到的最高等级进行匹配。

```
{
	"matchId":"1111aaaa-22bb-33cc-44dd-5555eeee66ff",
	"matchmakingConfigurationArn":"arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MyMatchmakerConfig",
	"teams":[
	   {"name":"attacker",
		"players":[
           {"playerId":"4444dddd-55ee-66ff-77aa-8888bbbb99cc",
			"attributes":{
				"skills":{
					"attributeType":"STRING_DOUBLE_MAP",
					"valueAttribute":{"Body":10.0,"Mind":12.0,"Heart":15.0,"Soul":33.0}}
			}
		}]
	},{
		"name":"defender",
		"players":[{
			"playerId":"3333cccc-44dd-55ee-66ff-7777aaaa88bb",
			"attributes":{
				"skills":{
					"attributeType":"STRING_DOUBLE_MAP",
					"valueAttribute":{"Body":11.0,"Mind":12.0,"Heart":11.0,"Soul":40.0}}
			}
		}]
	}]
}
```

# 针对 FlexMatch 设置游戏服务器
<a name="match-server-setup"></a>

使用 Amazon GameLift Servers 托管的游戏服务器必须与 Amazon GameLift Servers 服务器 SDK 集成，并具有[将 Amazon GameLift Servers 添加至游戏服务器](https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html)中所述的核心功能。借助此功能，您的游戏服务器将能够在 Amazon GameLift Servers 托管资源上运行并与 Amazon GameLift Servers 服务通信。以下说明描述了添加 FlexMatch 功能所需执行的其他任务。

**将 FlexMatch 添加到游戏服务器**

1. **在开始游戏会话时使用对战数据。**您的游戏服务器需实施一个名为 `onStartGameSession()` 的回调函数。创建对战后，Amazon GameLift Servers 查找可用的游戏服务器进程并调用此函数，以提示其为该对战启动游戏会话。此调用包括一个游戏会话对象（[GameSession](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_GameSession.html)）。您的游戏服务器使用游戏会话信息（包括对战构建器数据）以启动游戏会话。有关启动游戏会话的更多详细信息，请参阅[开始游戏会话](https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html#gamelift-sdk-server-startsession)。有关对战构建器数据的更多信息，请参阅[关于对战构建器数据](match-server.md#match-server-data)。

1. **处理玩家连接。**当连接到已经匹配的游戏时，游戏客户端将引用玩家 ID 和玩家会话 ID（请参阅[验证新玩家](https://docs.aws.amazon.com/gamelift/latest/developerguide/gamelift-sdk-server-api.html#gamelift-sdk-server-validateplayer)）。设置游戏服务器，以使用玩家 ID 将传入玩家与对战构建器数据中的玩家信息进行关联。对战构建器数据将标识玩家的团队分配，以及在游戏中代表玩家的其他信息。

1. **在玩家离开游戏时进行报告。**确保您的游戏服务器调用服务器 SDK [RemovePlayerSession](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/integration-server-sdk5-cpp-actions.html#integration-server-sdk5-cpp-removeplayersession) 来报告退出的玩家。如果您使用 FlexMatch 回填填充现有游戏中的空位置，此步骤非常重要。了解有关在 [利用 FlexMatch 回填现有游戏](match-backfill.md) 中实施 FlexMatch 回填的更多信息。

1. **要求新玩家填补现有对战（可选）。**确定您想要如何回填现有对战。如果您的对战构建器将回填模式设置为“手动”，您可能需要为您的游戏添加回填支持。如果回填模式设置为“自动”，您可能需要一种为单个游戏会话关闭此模式的方法。例如，您可能希望在游戏会话到达游戏中的某个点后停止回填。了解有关如何在 [利用 FlexMatch 回填现有游戏](match-backfill.md) 中实施对战回填的更多信息。