發表文章

目前顯示的是 2021的文章

UE4 開發常用外部工具介紹

圖片
 在開發遊戲的過程中,還是會需要用到不少外部的工具來輔助開發。 本篇就要來介紹用了好幾年覺得好用的工具。 因為個人是程式,所以其他職能不一定適合,就當參考參考。 有些是免費,有些是付費。 另外我的環境是windows,所以其他desktop平台也不一定適用。 本篇我發誓百分之百不是業配,我沒有拿任何一毛錢,真的就是經驗分享。 版本控制系統(必備) ★★★★★ 例如git、svn、perforce等等。 基本上版本控制系統百分之百是必須的,就選擇一套用吧。 文字編輯器 ★★★★☆ Visual Studio Code & Notepad++ 這兩個我都有裝。也是建議至少擇一。 比起visual studio開啟比較笨重,這兩套開啟快速是大優點。 看各種檔案或是作文字替換、Unicode 轉換也都很方便。 Visual Assist ★★★☆☆ 俗稱的番茄,小番茄。 是屬於Visual Studio的外部工具,基本上可以用最快的時間找到你要的變數,函式,檔案。 對我個人來說幾乎是必裝,因為個人不太能等待Visual Studio幫我找檔案的時間。 會是只有三顆星是因為代理商的價格實在是太不推薦了,而且個人版的授權寫得不清不楚的,一邊寫可以公司用,一邊寫不能公司用。 桌面錄影軟體 ★★★☆☆ 目前是用OBS ,不過已經很久沒更新了。 不確定現在有沒有更好的。 桌面錄影軟體我都拿來除錯,先找到問題重現的方法後,錄製遊戲過程,然後逐格播放影片,再來分析問題在哪。 硬碟空間管理與分析 WinDirStat 檔案內容分析 ★★★★☆ 在使用UE4的過程中,硬碟永遠不夠用,尤其是常常出不同平台的版本,或是出各種版本測試,都需要用掉大量的硬碟空間。 這時候我都會定期使用WinDirStat對專案目錄作分析,找出特別大的資料夾,如果不是必需的就會砍掉。 另外一個使用時機則是分析打包後資料的時候,有的時候最後打包的檔案過大。 我會利用這個軟體看一下Cooked目錄,分析一下是不是有哪些Asset檔不符合應該有的大小,然後再回去做調整。 mklink 目錄連結 ★★★★★ windows內建的外部工具,但是因為太好用了所以不能不特別介紹 大部份開發UE4使用SSD應該已經是標配,不過並不是所有的專案都能整個專案放SSD。 但是如果全部放硬碟,想必開啟或使用的速度上是受到嚴重限制的。

批次執行Console commands

 有的時候我們會想要執行一連串的console command,才能得到結果,可是又不想要為這一串console command專門寫一個console command把他們集合起來。怎麼辦? 作法(只需要做一次) 把功能加在CheatManager 在你繼承的CheatManager.h加上函式 UFUNCTION(exec) void ExecComboCommand(const FString& ComboCommandName); 在你繼承的CheatManager.cpp實作函式 void UMyCheatManager::ExecComboCommand(const FString& ComboCommandName) { FConfigSection* CommandsToRun = GConfig->GetSectionPrivate(*ComboCommandName, false, true, GGameIni); if (!CommandsToRun) { return; } if (!IsValid(GetOuterAPlayerController())) { return; } for (FConfigSectionMap::TIterator It(*CommandsToRun); It; ++It) { GetOuterAPlayerController()->ConsoleCommand(*It.Value().GetValue()); } } 使用組合指令 在ini裡面製作要批次執行的指令 例如在 [Project]\Saved\Config\Windows\Game.ini 新增 [Debug.ComboCommand1] +Cmds=stat fps +Cmds=stat unit (新增的時候請先關閉Editor,以免修改被Editor蓋掉) 如果要上平台也能測試,可能就要新增在 [Project]\Config\DefaultGame.ini 內不過記得最後要拔掉。 然後打開你的Editor或是執行目標平台的遊戲,先輸入 EnableCheats 再輸入 Ex

客製化DisplayAll輸出Struct的內容

  在使用DisplayAll來顯示物件資訊的時候,有些struct結構比較龐大或是複雜(例如帶有指標指向其他物件)的時候,會顯示過多的資訊,讓整個螢幕變得很亂,反而不利於除錯。這時候我們會想要控制struct輸出的結果,去除不想看到的欄位。 為了達到這件事,我們尋找了一下怎麼控制輸出的結果,後來找到這篇的方法,可以透過UE4對struct做的Type Traits來幫助我們做到這件事。 Type Traits如果不知道是什麼的話沒有關係,下面的範例直接抄就好了。 不過打在這邊就單純是讓想多了解一點的人,有關鍵字可以做更進一步的了解背後運作的原理。 修改輸出結果的具體範例以及程式碼可以在Class.cpp以及Class.h裡面看到。 檔案路徑在 Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp Class.cpp裡面有個FTestStruct struct ENGINE_API FTestStruct 這次的需求,需要關注的項目是 WithExportTextItem 以及Struct對應的函式ExportTextItem 你必須先定義TStructOpsTypeTraits<FTestStruct>,並把將WithExportTextItem設為true template<> struct TStructOpsTypeTraits<FTestStruct> : public TStructOpsTypeTraitsBase2<FTestStruct> { enum { WithExportTextItem = true, }; }; 然後在FTestStruct裡面實作ExportTextItem。 bool ExportTextItem(FString& ValueStr, FTestStruct const& DefaultValue, UObject* Parent, int32 PortFlags, UObject* ExportRootScope) const { ValueStr += TEXT("("); for (TMap<int32, double>::TCons