ThirdPersonMP 範例專案本機部署和偵錯
本指南的目的是示範如何以符合 MPS 的方式在本機電腦上執行遊戲伺服器,讓您可以在將伺服器上傳至 PlayFab 之前進行測試和偵錯。目標
- 測試 ThirdPersonMP+GSDK 專案的本機部署選項。
- 確認您的伺服器在使用 LocalMultiplayerAgent 執行時能正確執行
- 確認您可以將偵錯工具附加至您的伺服器執行個體
需求
- 下載 Visual Studio。Community 版本是免費的。
- 必要的工作負載:.NET 桌面開發和使用 C++ 的桌面開發
- 下載 Unreal Engine 原始程式碼。如需指示,請參閱下載 Unreal Engine 原始程式碼 (外部)。
- 已安裝並設定 PlayFab Unreal GSDK 的已完成 Unreal 專案
- 從 Visual Studio 建置之專案的 “Development Server” 設定
- [選用] 下載 LocalMultiplayerAgent
- [選用] 或者,下載 LocalMultiplayerAgent 原始程式碼。
- 使用 Visual Studio 從此存放庫建置之 LocalMultiplayerAgent 的 “Debug” 或 “Release” 設定
- 使用 Visual Studio 開啟 MpsAgent.sln,選取 Debug 或 Release 設定,然後建置 LocalMultiplayerAgent。
- [選用] 安裝 Windows 版 Docker
標記法
{depot} 指的是您下載 Git 專案之位置的完整 Windows 路徑。這些可以位於您喜歡的任何位置,例如:C:\depot、S:\depot、Z:\gitrepos,或任何對您方便的磁碟機和路徑。通常建議 (特別是對於 Unreal) 您的 {depot} 路徑越短越好。對於作者而言,{depot} 解析為:M:\depot\GSDK。例如,根據上方的需求清單,您可能會有下列部分或全部內容:
- {depot}/ThirdPersonMP
- {depot}/MpsAgent
- [選用] {depot}/gsdk [這包含先前安裝至 ThirdPersonMP 的 PlayFab Unreal GSDK 外掛程式]
- [選用] {depot}/UnrealMarketplacePlugin [這包含 PlayFab Unreal Marketplace 外掛程式,本指南不需要它,但大多數 PlayFab 功能都需要它]
指示
本機執行,不使用容器
首先,您需要設定 LocalMultiplayerAgent 以執行您的伺服器專案。第一次反覆項目會直接在本機電腦上執行處理序,不進行任何隔離。 在檔案總管中,找到並開啟檔案:{depot}\MpsAgent\LocalMultiplayerAgent\MultiplayerSettings.json。此檔案的縮寫版本以及對本指南重要的部分如下 [請注意 json 中路徑的 \ 已逸出——這是 json 檔案,因此必須將所有 \ 逸出為 \\]:
... 遮蔽的 json 檔案部分只需使用專案預設值即可。重要欄位的用途和值如下:
- RunContainer:對於本指南,此值一律為 false。將其設定為 true 需要 Docker。
- 為 true 時,會忽略 ProcessStartParameters/StartGameCommand,改用 ContainerStartParameters/StartGameCommand
- 為 true 時,所有內容都會在 docker 容器中建置和執行,而不是在本機電腦內容中
- 本指南涵蓋 RunContainer 為 false 的案例,以便我們能更輕鬆地對伺服器處理序進行偵錯
- 將其設定為 true 需要發行伺服器組建,以及額外的 Windows 版 Docker
- OutputFolder:
"<Local absolute path that will be used to store the required output artifacts>"- 此位置必須完整定義,且此位置必須存在有效的目錄。
- AssetDetails/LocalFilePath:{PATH-TO-ZIP}
- 此位置必須完整定義,且此位置必須存在有效的 zip 檔案
- 此 zip 檔案應包含完整建構的 “Shipping Server” 組建
- PortMappingsList:
- 這相當於在 Game Manager 中定義連接埠的 LocalMultiplayerAgent 版本
- GSDK 外掛程式以硬式編碼方式尋找名稱為 gameport 的連接埠
- GSDK 外掛程式的 SetDefaultServerHostPort 方法會在內部覆寫內部 Unreal 伺服器裝載連接埠,使其與此連接埠相符
- GSDK 外掛程式_只會_使用名為 gameport 的連接埠,使用 LocalMultiplayerAgent 時,此連接埠是在 PortMappingsList 中設定的。
- 此 json 可讓您在本機測試由 MPS 驅動此連接埠號碼,並確保您的 GSDK 外掛程式能正確接收它
- ContainerStartParameters/StartGameCommand:當 RunContainer 為 false 時,不會使用此項目。
- 當 RunContainer==true 時,它會取代 ProcessStartParameters/StartGameCommand
- 此路徑是 docker 容器內的內部路徑,將是 AssetDetails/MountPath 加上 AssetDetails/LocalFilePath 所定義之 zip 檔案中 exe 的內部路徑
- 對於此範例,這可以是:
C:\\Assets\\ThirdPersonMPServer.exe -log
- ProcessStartParameters/StartGameCommand:此命令實際上將是您的 exe 路徑,以及用來啟動遊戲伺服器的任何命令列參數
- -log 是 Unreal 命令,指示遊戲伺服器儲存執行記錄
- {PATH-TO-EXE} 可以是下列兩個選擇之一:
- 遊戲伺服器 exe (甚至是開發遊戲伺服器) 的任何絕對路徑,加上伺服器的任何命令列參數
- 此選擇會忽略 zip 檔案的內容,而是執行任何位置的任意 exe
- 這是本機偵錯選項,只能在您的本機電腦上用來對開發組建進行偵錯:它無法協助您驗證 zip 檔案是否已準備好上傳至 MPS
- 測試開發伺服器時應使用此選擇,適合附加 VS 偵錯工具
- 對於此範例,這可以是:
{depot}\\ThirdPersonMP\\Binaries\\Win64\\ThirdPersonMPServer.exe -log - 對於作者而言,這是:
M:\\depot\\GSDK\\ThirdPersonMPGSDK\\Binaries\\Win64\\ThirdPersonMPServer.exe -log
- 相對路徑,應指出 zip 檔案中執行伺服器的相對路徑
- 這是反映 MPS 雲端執行個體運作方式的標準工作流程
- 測試發行伺服器時應使用此選擇,有助於驗證您的 zip 是否已準備好上傳至 MPS
- 對於此範例,這可以是:
ThirdPersonMPServer.exe -log
- 遊戲伺服器 exe (甚至是開發遊戲伺服器) 的任何絕對路徑,加上伺服器的任何命令列參數
對伺服器進行偵錯
您可以使用 “Start New Instance” 命令 (有時繫結至 F5) 從 Visual Studio 執行 LocalMultiplayerAgent,或瀏覽至{depot}\LocalMultiplayerAgent\bin\{configuration}\netcoreapp3.1 並按兩下 “LocalMultiplayerAgent.exe”。您也可以從 cmd 視窗內執行它,以觀察或擷取偵錯記錄資訊。
執行 LocalMultiplayerAgent.exe 應該會啟動您的遊戲伺服器。您通常會想要為此開啟工作管理員。您可以在工作管理員的 Details 索引標籤中找到遊戲伺服器處理序識別碼。
在工作管理員中看到 ThirdPersonMPServer 處理序正在執行後,您可以返回 Visual Studio,選取 Debug 下拉式清單 -> Attach to Process。在快顯視窗中,您可以搜尋處理序名稱:ThirdPersonMPServer,然後選取從工作管理員中識別出的正確處理序識別碼。
此時,您應該能夠對遊戲伺服器執行一般的偵錯。
注意:Unreal 提供多種組建設定和多種建置伺服器的方式。為了獲得最佳結果,請使用直接從 Visual Studio 建置的 “Development Server” 設定和輸出。發行組建或來自 Development Editor 的組建在其他情況下可能效果更好,但直接從 Visual Studio 建置的 “Development Server” 設定在 Visual Studio 中更容易附加和偵錯。
