

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Unity 的外掛程式：將您的遊戲部署到受管 EC2 機群
<a name="unity-plug-in-ec2"></a>

在此工作流程中，您可以使用 外掛程式來準備您的遊戲，以託管由 管理的雲端型運算資源Amazon GameLift Servers。您可以為 Amazon GameLift Servers 功能新增用戶端和伺服器遊戲程式碼，然後將伺服器建置上傳到 Amazon GameLift Servers服務以進行託管。當此工作流程完成時，您會在雲端中執行遊戲伺服器，以及可以與其連線的運作遊戲用戶端。

**若要啟動Amazon GameLift Servers受管 Amazon EC2 工作流程：**
+ 在 Unity 編輯器主功能表中，選擇**Amazon GameLift Servers**並選取 **Host with Managed EC2**。此工作流程提供六個步驟來整合、建置、部署和啟動遊戲元件。

## 設定您的設定檔
<a name="unity-plug-in-ec2-profile"></a>

選擇您要在遵循此工作流程時使用的設定檔。您選取的設定檔會影響工作流程中的所有步驟。您建立的所有資源都會與設定檔 AWS 的帳戶相關聯，並放置在設定檔的預設 AWS 區域中。設定檔使用者的許可決定您對 AWS 資源和動作的存取。

1. 從可用設定檔的下拉式清單中選取設定檔。如果您還沒有設定檔，或想要建立新的設定檔，請前往Amazon GameLift Servers選單並選擇**設定 AWS 帳戶設定檔**。

1. 如果引導狀態不是「作用中」，請選擇**引導設定檔**，並等待狀態變更為「作用中」。

## 將您的遊戲與 整合 Amazon GameLift Servers
<a name="unity-plug-in-ec2-integrate"></a>

在此任務中，您會更新遊戲專案中的用戶端和伺服器程式碼。
+ 遊戲伺服器必須能夠與服務通訊Amazon GameLift Servers，以接收啟動遊戲工作階段、提供遊戲工作階段連線資訊以及報告狀態的提示。
+ 遊戲用戶端必須能夠取得遊戲工作階段的相關資訊、加入或啟動遊戲工作階段，以及取得連線資訊以加入遊戲。

**注意**  
如果您匯入了範例遊戲，則可以略過此步驟。範例遊戲資產已有必要的伺服器和用戶端程式碼。

### 整合您的伺服器程式碼
<a name="unity-plug-in-ec2-integrate-server"></a>

使用您自己的遊戲專案搭配自訂場景時，請使用提供的範例程式碼，將必要的伺服器程式碼新增至您的遊戲專案。如果您將遊戲專案與 Anywhere 機群整合進行測試，表示您已完成此步驟中的指示。

1. 在您的遊戲專案檔案中，開啟 `Assets/Scripts/Server` 資料夾。如果不存在，請建立它。

1. 前往 GitHub repo [ aws/amazon-gamelift-plugin-unity](https://github.com/aws/amazon-gamelift-plugin-unity) 並開啟路徑 `Samples~/SampleGame/Assets/Scripts/Server`。

1. 找到 檔案並將其`GameLiftServer.cs`複製到遊戲專案的`Server`資料夾。當您建置伺服器可執行檔時，請使用此檔案做為建置目標。

範例程式碼包含這些最低必要元素，這些元素使用 Amazon GameLift Servers C\# 伺服器 SDK （第 5 版）：
+ 初始化 Amazon GameLift Servers API 用戶端。Amazon GameLift Servers Anywhere 機群需要具有伺服器參數的 InitSDK() 呼叫。這些設定會自動設定為在 外掛程式中使用。
+ 實作必要的回呼函數，以回應來自 Amazon GameLift Servers服務的請求，包括 `OnStartGameSession`、 `OnProcessTerminate`和 `onHealthCheck`。
+ `ProcessReady()` 使用指定的連接埠呼叫 ，以在伺服器程序準備好託管遊戲工作階段時通知Amazon GameLift Servers服務。

如果您想要自訂範例伺服器程式碼，請參閱這些資源：
+ [使用伺服器 SDK 將 Amazon GameLift Servers新增至您的遊戲伺服器](gamelift-sdk-server-api.md)
+ [適用於 -- 動作的 C\# 伺服器 SDK Amazon GameLift Servers 5.x](integration-server-sdk5-csharp-actions.md)

### 整合您的用戶端程式碼
<a name="unity-plug-in-ec2-integrate-client"></a>

對於連接到雲端遊戲伺服器的遊戲用戶端，最佳實務是使用用戶端後端服務來呼叫Amazon GameLift Servers服務，而不是直接從遊戲用戶端進行呼叫。

在託管於受管 EC2 機群的外掛程式工作流程中，每個部署案例都包含預先建置的後端服務，其中包含下列元件：
+ 一組 Lambda 函數和 DynamoDB 資料表，用於請求遊戲工作階段和擷取遊戲工作階段資訊。這些元件使用 API 閘道做為代理。
+ 產生唯一玩家 IDs並驗證玩家連線的 Amazon Cognito 使用者集區。

若要使用這些元件，您的遊戲用戶端需要將請求傳送至後端服務的功能，才能執行下列動作：
+ 在 AWS Cognito 使用者集區中建立玩家使用者並進行驗證。
+ 加入遊戲工作階段並接收連線資訊。
+ 使用配對加入遊戲。

使用下列資源做為指南。
+ 將用戶端與 GitHub repo [ aws/amazon-gamelift-plugin-unity](https://github.com/aws/amazon-gamelift-plugin-unity) 中的 [ GameLiftCoreApi](https://github.com/aws/amazon-gamelift-plugin-unity/blob/main/Runtime/GameLiftCoreApi.cs) 類別整合。此類別提供玩家身分驗證和擷取遊戲工作階段資訊的控制項。
+ 若要檢視範例遊戲整合，請前往 GitHub repo [aws/amazon-gamelift-plugin-unity ](https://github.com/aws/amazon-gamelift-plugin-unity)、`Samples~/SampleGame/Assets/Scripts/Client/GameLiftClient.cs`。
+ [整合Amazon GameLift Servers遊戲用戶端功能](gamelift-sdk-client-api.md).

### （僅限 Uniity 6.3\+) 整合 install.sh 指令碼
<a name="unity-plug-in-ec2-integrate-install-script"></a>

Linux 上的 Unity 6.3 需要 glibc 2.35。Amazon Linux 2023 包含 glibc 2.34。提供 install.sh 指令碼，可處理從來源建置 glibc 2.35，並將 Unity 二進位檔設定為使用 glibc 2.35。

1. 前往 GitHub repo [ aws/amazon-gamelift-plugin-unity](https://github.com/aws/amazon-gamelift-plugin-unity) 並開啟路徑 `ExtraServerResources`。

1. 找到 檔案，並將其`install.sh`複製到包含伺服器建置的資料夾中。

1.  如果您有現有的 `install.sh`，請將兩個指令碼的內容合併到單一 `install.sh`。

## 選取部署案例
<a name="unity-plug-in-ec2-scenarios"></a>

在此步驟中，您可以選擇目前要部署的遊戲託管解決方案。您可以使用任何案例，對遊戲進行多個部署。
+ **單一區域機群：**將您的遊戲伺服器部署到作用中設定檔預設 AWS 區域中的單一託管資源機群。此案例是測試與 AWS 和 伺服器建置組態整合的良好起點。它會部署下列資源：
  + AWS 機群 （隨需），您的遊戲伺服器建置已安裝並執行。
  + Amazon Cognito 使用者集區和用戶端可讓玩家驗證和啟動遊戲。
  + 將使用者集區與 API 連結APIs 閘道授權方。
  + WebACl 用於調節對 API 閘道的過多玩家呼叫。
  + API 閘道 \+ Lambda 函數，讓玩家請求遊戲位置。`CreateGameSession()` 如果沒有可用，此函數會呼叫 。
  + API 閘道 \+ Lambda 函數，讓玩家取得其遊戲請求的連線資訊。
+ **FlexMatch 機群：**將您的遊戲伺服器部署到一組機群，並使用規則設定 FlexMatch 配對建構器來建立玩家配對。此案例使用具有多機群、多位置結構的低成本 Spot 託管，以實現持久的可用性。當您準備好開始為託管解決方案設計配對建構器元件時，此方法非常有用。在此案例中，您將為此解決方案建立基本資源，之後可以視需要自訂。它會部署下列資源：
  + FlexMatch 配對組態和配對規則集，以接受玩家請求並形成配對。
  + 安裝 AWS 遊戲伺服器組建並在多個位置執行的三個機群。包含兩個 Spot 機群和一個隨需機群做為備份。
  + AWS 透過尋找最佳的託管資源 （根據可行性、成本、玩家延遲等） 並啟動遊戲工作階段，滿足對提議配對的請求的遊戲工作階段置放佇列。
  + Amazon Cognito 使用者集區和用戶端可讓玩家驗證和啟動遊戲。
  + 將使用者集區與 API 連結APIs 閘道授權方。
  + WebACl 用於調節對 API 閘道的過多玩家呼叫。
  + API 閘道 \+ Lambda 函數，讓玩家請求遊戲位置。此函數會呼叫 `StartMatchmaking()`。
  + API 閘道 \+ Lambda 函數，讓玩家取得其遊戲請求的連線資訊。
  + Amazon DynamoDB 資料表可存放玩家和遊戲工作階段資訊的配對票證。
  + SNS 主題 \+ 處理 GameSessionQueue 事件的 Lambda 函數。

## 設定遊戲參數
<a name="unity-plug-in-ec2-parameters"></a>

在此步驟中，您會描述要上傳到的遊戲 AWS。
+ **遊戲名稱：**為您的遊戲專案提供有意義的名稱。此名稱用於 外掛程式。
+ **機群名稱：**為您的受管 EC2 機群提供有意義的名稱。在主控台中列出資源時， Amazon GameLift Servers 會使用此名稱 AWS （以及機群 ID)。
+ **組建名稱：**為您的伺服器組建提供有意義的名稱。 AWS 使用此名稱來參考上傳到 Amazon GameLift Servers並用於部署的伺服器組建複本。
+ **啟動參數：**輸入在受管 EC2 機群執行個體上啟動伺服器可執行檔時要執行的選用指示。長度上限為 1024 個字元。
+ **遊戲伺服器資料夾：**提供包含伺服器建置的本機資料夾路徑。
+ **遊戲伺服器檔案：**指定伺服器可執行檔名稱。

## 部署案例
<a name="unity-plug-in-ec2-deploy"></a>

在此步驟中，您會根據您選擇的部署案例，將遊戲部署至雲端託管解決方案。此程序可能需要幾分鐘的時間，同時 AWS 驗證您的伺服器建置、佈建託管資源、安裝遊戲伺服器、啟動伺服器程序，以及準備好託管遊戲工作階段。

若要開始部署，請選擇**部署 CloudFormation**。您可以在此處追蹤遊戲託管的狀態。如需更多詳細資訊，您可以登入 的 AWS AWS 管理主控台，並檢視事件通知。請務必使用與外掛程式中作用中使用者設定檔相同的帳戶、使用者和 AWS 區域來登入。

部署完成時，您會在 AWS EC2 執行個體上安裝遊戲伺服器。至少有一個伺服器程序正在執行，並準備好啟動遊戲工作階段。

## 啟動遊戲用戶端
<a name="unity-plug-in-ec2-launch"></a>

成功部署機群時，您現在已讓遊戲伺服器執行並可用於託管遊戲工作階段。您現在可以建置用戶端、啟動用戶端、連線以加入遊戲工作階段。

1. 設定您的遊戲用戶端。在此步驟中，您會提示外掛程式更新遊戲專案的`GameLiftClientSettings`資產。外掛程式會使用此資產來存放遊戲用戶端連線至Amazon GameLift Servers服務所需的特定資訊。

   1. 如果您未匯入並初始化範例遊戲，請建立新的`GameLiftClientSettings`資產。在 Unity 編輯器主功能表中，選擇**資產、建立、Amazon GameLift、用戶端設定**。如果您在專案`GameLiftClientSettings`中建立多個 複本，外掛程式會自動偵測此情況，並通知您外掛程式將更新的資產。

   1. 在**啟動遊戲**中，選擇**設定用戶端：套用受管 EC2 設定**。此動作會更新您的遊戲用戶端設定，以使用您剛部署的受管 EC2 機群。

1. 建置您的遊戲用戶端。使用標準 Unity 建置程序建置用戶端可執行檔。在檔案、建置設定中，將平台切換至 Windows、Mac、Linux。如果您匯入範例遊戲並初始化設定，則建置清單和建置目標會自動更新。

1. 啟動新建置的遊戲用戶端可執行檔。若要開始玩遊戲，請啟動兩到四個用戶端執行個體，並使用每個執行個體中的 UI 來加入遊戲工作階段。

如果您使用的是範例遊戲用戶端，則具有下列特性：
+ 玩家登入元件。連線至 Anywhere 機群上的遊戲伺服器時，沒有玩家驗證。您可以輸入任何值來加入遊戲工作階段。
+ 簡單加入遊戲 UI。當用戶端嘗試加入遊戲時，用戶端會自動尋找具有可用玩家位置的作用中遊戲工作階段。如果沒有可用的遊戲工作階段，用戶端會請求新的遊戲工作階段。如果遊戲工作階段可用，用戶端會請求加入可用的遊戲工作階段。使用多個並行用戶端測試遊戲時，第一個用戶端會啟動遊戲工作階段，其餘用戶端會自動加入現有的遊戲工作階段。
+ 具有四個玩家位置的遊戲工作階段。您可以同時啟動最多四個遊戲用戶端執行個體，它們將加入相同的遊戲工作階段。