發表文章

目前顯示的是 2月, 2021的文章

客製化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