Epic GamesがLearning用に提供しているMVVMのサンプルで、Dynamic Entry Boxという見慣れないWidgetが使われていて、それについて情報が出てこなかったので調べてみました。
Dynamic Entry Box概要
Unrean Engine C++ API Reference / UDynamicEntryBoxより
デザイン時と実行時の両方でエントリを自動生成する特別なボックスパネルです。
エントリ数が変動する可能性があるものの、リスト/タイルビューを設定する手間や概念的なオーバーヘッドが割に合わない場合に便利です。
ここでのエントリはリストビューのように仮想化されていないため、多数のアイテムをスクロールする場合は通常、この方法は避けるべきです。
デザイナーで子要素を手動で追加することはできません。すべて、指定されたエントリクラスに基づいて自動生成されます。
簡単にまとめると、動的なリスト/タイルビューの管理に便利なWidgetのようです。
使用方法
- Dynamic Entry BoxをWBP上に配置する
- 配置したWidgetのDetailsビューでEntry Widget Classを設定する。Entry Widget ClassはUser Widgetを継承したWBPであれば何でもよさそう
- WBPのGraphビューで子要素生成のための処理を書く
Dynamic Entry Boxに対して子要素の制御のために使う関数は主に3つです。
- Create Entry: 子要素を生成し、追加する
- Remove Entry: 子要素を削除する
- Reset: 子要素をクリアする
データの増減に合わせてこれらのノードを呼び、ビューを更新する形になります。
サンプルではデータの更新に合わせてReset後にCreate Entryで子要素を追加していました。
Wrap Boxとの比較
同じような機能のWidgetにWrap Boxがありますが、Wrap Boxの実装と比較するとCreate Widget + Add Child to Wrap Boxの部分が、Dynamic Entry BoxではCreate Entryにまとめられて内部的に追加まで行われています。
Wrap Boxより使いやすい点として、Dynamic Entry Boxは動的な生成ができるWidgetなため、Designer上で調整すれば、指定個数でのプレビューが簡単にできるのがいいですね。生成するWidget (Entry Widget Class) をDesignerで変更できるのもよいです。Wrap Boxでやろうとすると手動で子要素を追加するか、Graphを書く必要があるため、その点は結構便利そうです。
と思ってたら、Preview用の数のMAXが20に設定されてるのに気づきました。どうにか変更できないかと調べたらClamp(0-20)でハードコードされてたという…不便。
Entry Box Type
Wrap Boxとの大きな違いとして、Dynamic Entry BoxはEntry Box TypeとしてRadial(円形)とOverlay(重ねる)がオプションで用意されています。この機能を利用するためにDynamic Entry Boxを使うことがありそうです。
Radial
Overlay
今回の記事は以上です。
いつの間にか追加されているWidgetについて随時調べて行きたいですね。