工程中測試
創建bat文件,格式如下:
UE4Editor.exe路徑 工程文件名 [地圖名及參數] -game [其他自定義參數]
UE4Editor.exe路徑表示虛幻編輯器相應版本的UE4Editor.exe的絕對或者相對路徑,如果路徑名稱中有空格,需要用引號把路徑包裹住
工程文件名表示uproject文件的絕對或相對路徑,如果路徑名稱中有空格,需要用引號把路徑包裹住
[地圖名及參數] 可以指定啟動的地圖名稱,例如用一個完整路徑:/Game/Maps/LobbyMap,或者省略路徑,直接指定地圖名稱:LobbyMap。 地圖后面可以加?listen參數,表示以listenserver的方式打開該地圖
這里還可以添加ip地址,例如:...LobbyMap 127.0.0.1,這樣會讓該實例運行以后直接嘗試連接該ip地址
-game表示運行游戲,如果不加該參數,則會啟動編輯器
例如:
服務端:
"C:\Program Files\Epic Games\UE_4.18\Engine\Binaries\Win64\UE4Editor.exe" "D:\WorkingFolder\SceneVisualizationOfNPP\UE4_Program\UE4_Program.uproject" LobbyMap?listen -game -clientType server
客戶端:
"C:\Program Files\Epic Games\UE_4.18\Engine\Binaries\Win64\UE4Editor.exe" "D:\WorkingFolder\SceneVisualizationOfNPP\UE4_Program\UE4_Program.uproject" -game -clientType clientA
(這個客戶端命令沒有直接嘗試連接某個IP地址。可以在項目中利用Session去進行連接。)
Packaged后測試
Packaged以后的游戲會生成一個可執行的exe,直接點擊就可以運行,但是如果想向其中傳入一些參數,方法如下:
創建一個bat,內容格式:
游戲程序exe路徑 [地圖名和參數] [其他自定參數]
服務端:
WindowsNoEditor\UE4_Program2.exe LobbyMap?listen -clientType server
客戶端
WindowsNoEditor\UE4_Program2.exe -clientType clientA
批量測試
如果討厭bat文件的黑窗口,並且想依次運行多個bat,可以借助vbs腳本
范例如下:
set ws=WScript.CreateObject("WScript.Shell") ws.Run "RunServer.bat",0 WScript.Sleep 1000 ws.Run "RunClientA.bat",0 WScript.Sleep 1000 ws.Run "RunCLientB.bat",0
上述腳本的意思是先運行RunServer.bat,等待一秒,運行RunClientA.bat,等待一秒,運行RunClientB.bat
命令行Package
如果需要頻繁package游戲到固定路徑下進行測試,建議借助虛幻引擎的RunUAT.bat,其位置在 引擎目錄\Engine\Build\BatchFiles
相關wiki: https://wiki.unrealengine.com/How_to_package_your_game_with_commands
我的使用范例:
RunUAT BuildCookRun -project="D:\WorkingFolder\...\UE4_Program2.uproject" -noP4 -platform=Win64 -clientconfig=Development -serverconfig=Development -cook -allmaps -stage -pak -archive -archivedirectory="D:\WorkingFolder\...\UE4_Program_Build2"
注意最后的輸出路徑結尾不能加反斜杠,不然會報錯。
這樣的話,只需要在RunUAT.bat的目錄下打開一個命令行,運行上述命令即可package。下次再package只需要按上鍵,再回車就可以了。
或者有個更方便的辦法,就是把上述內容寫在一個bat里,需要用的時候直接雙擊就可以了。但是內容要稍微做點修改:
"C:\Program Files\Epic Games\UE_4.18\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun -project="D:\WorkingFolder\SceneVisualizationOfNPP\UE4_Program2\UE4_Program2.uproject" -noP4 -platform=Win64 -clientconfig=Development -serverconfig=Development -cook -allmaps -stage -pak -archive -archivedirectory="D:\WorkingFolder\SceneVisualizationOfNPP\UE4_Program_Build2"
命令行復制文件夾
網絡測試有時候需要兩個客戶端,用bat啟兩次會導致本地化存儲(例如save game)的沖突,這時候需要把打包好的程序復制兩份或者多份。這個需求也可以自動化,使用bat的xcopy命令進行。
范例:
xcopy /E /Y "D:\WorkingFolder\SceneVisualizationOfNPP\UE4_Program_Build2\WindowsNoEditor" "D:\WorkingFolder\SceneVisualizationOfNPP\UE4_Program_Build2\WindowsNoEditor2\"
上述bat文件的作用是把第一個目錄下的內容復制到第二個路徑下,/E 表示復制目錄和子目錄,包括空的 /Y表示如果存在同名文件直接覆蓋,不用提示
這行命令可以寫在Package命令的下一行,等package完直接復制一份,更加省事。
但是要注意,如果要和上述例子連寫,需要在第一條調用bat的命令前面添加一個call ,否則就只執行第一條,第二條會被略過。范例:
call "C:\Program Files\Epic Games\UE_4.18\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun -project="D:\WorkingFolder\SceneVisualizationOfNPP\UE4_Program2\UE4_Program2.uproject" -noP4 -platform=Win64 -clientconfig=Development -serverconfig=Development -cook -allmaps -stage -pak -archive -archivedirectory="D:\WorkingFolder\SceneVisualizationOfNPP\UE4_Program_Build2" xcopy /E /Y "D:\WorkingFolder\SceneVisualizationOfNPP\UE4_Program_Build2\WindowsNoEditor" "D:\WorkingFolder\SceneVisualizationOfNPP\UE4_Program_Build2\WindowsNoEditor2\" pause
如果不增加最前面的 call, 命令行就直接跳轉到 RunUAT.bat的環境中去了,不會在第一條執行完之后跳轉回來執行xcopy。
最后的pause可以去掉,這里加上只是為了防止執行完畢自動關閉窗口,以便更清楚的在命令行窗口中看到執行xcopy的過程。