[UE4]UMGでUserWidgetを並べた時とBPで動的追加した時の検証。とWidgetAnimationのロード検証


UE4を用いたTPS制作事例 ～Earth Defense Force:Iron Rainの場合～

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">なんかやるらしい！銀河英雄伝説見てくる！　<a href="https://twitter.com/hashtag/UE4PM?src=hash&amp;ref_src=twsrc%5Etfw">#UE4PM</a> <a href="https://t.co/S2urx3saQ0">pic.twitter.com/S2urx3saQ0</a></p>&mdash; おかず (@pafuhana1213) <a href="https://twitter.com/pafuhana1213/status/1174896280088088576?ref_src=twsrc%5Etfw">September 20, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

のロード時間周りの話でありました、UMGでUserWidgetを子ウィジェットに登録するより、BPから追加した方がロード時間速くなった的な話がありました。
（ｺｺ資料アップロード待ち）

軽く検証してみました。
ガワだけなので内部処理まで追っていないです。間違ってたらごめんなさい。
UE4.22.3で検証


# 検証データ

![2019-09-23_22h43_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58518/e4e53370-c48f-f779-144e-b03d1b9ac611.png)
こんな1行のWidgetを
![2019-09-23_22h45_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58518/28b291d5-f62f-dfb0-1f1e-c86d47080d18.png)
こんな感じで13行*2列、並べるウィジェットです。オプション画面とか。


## パターン１
![2019-09-23_22h51_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58518/dddc99d1-da3b-d1c2-aa55-64b6b023eed1.png)
UMGに全部突っ込んだデータです

## パターン２
![2019-09-23_22h59_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58518/3ac8e9d5-ace3-012b-b185-20f6415e429b.png)
![2019-09-23_23h00_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58518/0626d5b4-5bce-631a-3d22-2753b66edf13.png)
UMG自体には追加せず、BPからWidget作って追加

# 検証方法
![2019-09-23_23h26_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58518/e628b429-99f8-7dee-4a0c-13393c183b60.png)
UMGを動的にロードして適用します

後はパッケージングして、いつものobj listでUObject数を調べました
→ [[UE4]GarbageCollectの対象周りを調べてみた](https://qiita.com/com04/items/5d8d73e36f3b88a8b74e)
![2019-09-23_23h45_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58518/d7434a03-cdf0-fb71-10ed-c4838ab5e84e.png)

# 結果

|   |Object総数|1行Widget数|
|--:|:-:|:-:|
|生成前|36004|0|
|パターン１:UMG入れ|37048|79|
|パターン２:BP追加|36574|27|

表示される13*2個とロードした1個を含めて27個。
UMGに全突っ込みしたパターン１はWidget数が3倍に。
パターン１の方はCDOとかアセットのロード自体に１行Widgetが乗ってしまう分で増えてる感じでしょうか？

GC的にはClusterされていると大きな影響はなさそう？
ロード時間的には余分な生成物があるので無駄は有りそう。
（PCだとこの規模ではほぼ差が出ないので検証結果は無し）

# 追検証
## アニメーションのロードについて
UMGに入れるとWidgetのアニメーションがその分ロードされる、的な話があったような記憶があります。
簡素ですが調べました。
"TestAnimation"という名前のアニメーションを1つだけ入ったウィジェット(UMG_Item)を3つほど突っ込んだUMGをロードしてみました
![2019-09-24_03h06_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58518/11e7f6c3-4286-8618-33e9-a16114751e2a.png)

### 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で調べるとインスタンス複数生成してもアニメーションは共通化されているような挙動が見受けられました。多分。