[程式] UE4 客製化DisplayAll輸出Struct的內容
網頁版
https://yekdniwue.blogspot.com/2021/02/CustomExportTextItem.html
在使用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>::TConstIterator It(Doubles); It; ++It)
{
ValueStr += FString::Printf(
TEXT("(%d,%f)"),It.Key(), It.Value());
}
ValueStr += TEXT(")");
return true;
}
需要注意的是第二個參數要根據struct給正確的名稱,
以這個範例來說是FTestStruct const&
如果你是使用自己的struct,要在這邊換成對應的[YourStruct] const&
我們也有注意到如果有逗號的話,會造成換行,這點算是在輸出的時候要注意的地方。
以上簡單的修改就可以寫入你客製化的內容在DisplayAll。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.19.38 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1614698590.A.8A4.html
推
03/03 01:05,
3年前
, 1F
03/03 01:05, 1F
推
03/03 17:52,
3年前
, 2F
03/03 17:52, 2F
推
03/04 00:31,
3年前
, 3F
03/04 00:31, 3F
→
03/05 10:10,
3年前
, 4F
03/05 10:10, 4F
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章