UE4を用いたTPS制作事例 ~Earth Defense Force:Iron Rainの場合~
なんかやるらしい!銀河英雄伝説見てくる! #UE4PM pic.twitter.com/S2urx3saQ0
— おかず (@pafuhana1213) September 20, 2019
のロード時間周りの話でありました、UMGでUserWidgetを子ウィジェットに登録するより、BPから追加した方がロード時間速くなった的な話がありました。
(ココ資料アップロード待ち)
軽く検証してみました。
ガワだけなので内部処理まで追っていないです。間違ってたらごめんなさい。
UE4.22.3で検証
検証データ
こんな1行のWidgetを
こんな感じで13行*2列、並べるウィジェットです。オプション画面とか。
パターン1
パターン2
検証方法
後はパッケージングして、いつものobj listでUObject数を調べました
→ [UE4]GarbageCollectの対象周りを調べてみた
結果
Object総数 | 1行Widget数 | |
---|---|---|
生成前 | 36004 | 0 |
パターン1:UMG入れ | 37048 | 79 |
パターン2:BP追加 | 36574 | 27 |
表示される13*2個とロードした1個を含めて27個。
UMGに全突っ込みしたパターン1はWidget数が3倍に。
パターン1の方はCDOとかアセットのロード自体に1行Widgetが乗ってしまう分で増えてる感じでしょうか?
GC的にはClusterされていると大きな影響はなさそう?
ロード時間的には余分な生成物があるので無駄は有りそう。
(PCだとこの規模ではほぼ差が出ないので検証結果は無し)
追検証
アニメーションのロードについて
UMGに入れるとWidgetのアニメーションがその分ロードされる、的な話があったような記憶があります。
簡素ですが調べました。
"TestAnimation"という名前のアニメーションを1つだけ入ったウィジェット(UMG_Item)を3つほど突っ込んだUMGをロードしてみました
UE4.19: Widgetに突っ込んだ
Obj List: Class=WidgetAnimation
Objects:
Object NumKB MaxKB ResExcKB ResExcDedSysKB ResExcShrSysKB ResExcDedVidKB ResExcShrVidKB ResExcUnkKB
WidgetAnimation /Game/419/UMG_All.WidgetArchetype:WidgetTree_0.UMG_Item.WidgetAnimation_0 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Game/419/UMG_Item.WidgetArchetype:TestAnimation_INST 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Game/419/UMG_All.UMG_All_C:WidgetTree.UMG_Item.TestAnimation_INST 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Game/419/UMG_All.UMG_All_C:WidgetTree.UMG_Item_0.TestAnimation_INST 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Game/419/UMG_All.UMG_All_C:WidgetTree.UMG_Item_1.TestAnimation_INST 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Game/419/UMG_Item.UMG_Item_C:TestAnimation_INST 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Game/419/UMG_All.WidgetArchetype:WidgetTree_0.UMG_Item_0.WidgetAnimation_1 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Game/419/UMG_All.WidgetArchetype:WidgetTree_0.UMG_Item_1.WidgetAnimation_2 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Engine/Transient.GameEngine_0:GameInstance_0.UMG_All_C_0.WidgetTree_0.UMG_Item.WidgetAnimation_0 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Engine/Transient.GameEngine_0:GameInstance_0.UMG_All_C_0.WidgetTree_0.UMG_Item_0.WidgetAnimation_1 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Engine/Transient.GameEngine_0:GameInstance_0.UMG_All_C_0.WidgetTree_0.UMG_Item_1.WidgetAnimation_2 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
Class Count NumKB MaxKB ResExcKB ResExcDedSysKB ResExcShrSysKB ResExcDedVidKB ResExcShrVidKB ResExcUnkKB
WidgetAnimation 11 12.59 12.72 0.00 0.00 0.00 0.00 0.00 0.00
11 Objects (Total: 0.012M / Max: 0.012M / Res: 0.000M | ResDedSys: 0.000M / ResShrSys: 0.000M / ResDedVid: 0.000M / ResShrVid: 0.000M / ResUnknown: 0.000M)
UE4.19: BPから追加した
Obj List: Class=WidgetAnimation
Objects:
Object NumKB MaxKB ResExcKB ResExcDedSysKB ResExcShrSysKB ResExcDedVidKB ResExcShrVidKB ResExcUnkKB
WidgetAnimation /Game/419/UMG_Item.WidgetArchetype:TestAnimation_INST 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Engine/Transient.GameEngine_0:GameInstance_0.UMG_Item_C_0.TestAnimation_INST 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Engine/Transient.GameEngine_0:GameInstance_0.UMG_Item_C_1.TestAnimation_INST 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Engine/Transient.GameEngine_0:GameInstance_0.UMG_Item_C_2.TestAnimation_INST 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
WidgetAnimation /Game/419/UMG_Item.UMG_Item_C:TestAnimation_INST 1.14 1.16 0.00 0.00 0.00 0.00 0.00 0.00
Class Count NumKB MaxKB ResExcKB ResExcDedSysKB ResExcShrSysKB ResExcDedVidKB ResExcShrVidKB ResExcUnkKB
WidgetAnimation 5 5.72 5.78 0.00 0.00 0.00 0.00 0.00 0.00
5 Objects (Total: 0.006M / Max: 0.006M / Res: 0.000M | ResDedSys: 0.000M / ResShrSys: 0.000M / ResDedVid: 0.000M / ResShrVid: 0.000M / ResUnknown: 0.000M)
UE4.22: Widgetに突っ込んだ
Obj List: Class=WidgetAnimation
Objects:
Object NumKB MaxKB ResExcKB ResExcDedSysKB ResExcShrSysKB ResExcDedVidKB ResExcShrVidKB ResExcUnkKB
WidgetAnimation /Game/419/UMG_Item.UMG_Item_C:TestAnimation_INST 1.04 1.05 0.00 0.00 0.00 0.00 0.00 0.00
Class Count NumKB MaxKB ResExcKB ResExcDedSysKB ResExcShrSysKB ResExcDedVidKB ResExcShrVidKB ResExcUnkKB
WidgetAnimation 1 1.04 1.05 0.00 0.00 0.00 0.00 0.00 0.00
1 Objects (Total: 0.001M / Max: 0.001M / Res: 0.000M | ResDedSys: 0.000M / ResShrSys: 0.000M / ResDedVid: 0.000M / ResShrVid: 0.000M / ResUnknown: 0.000M)
突っ込んだ方は親UserWidget内に含まれる子UserWidgetのアニメーションまで引っ付いてる感じでしょうか。
BPから追加した方はインスタンス毎のみのアニメーション数になっているようです。
ただ、UE4.22で調べるとインスタンス複数生成してもアニメーションは共通化されているような挙動が見受けられました。多分。