LoginSignup
2
0

More than 3 years have passed since last update.

[UE4] Widgetのレイヤー管理

Posted at

対象Ver:UE4.25.0

1. レイヤーとZOrder

 Widgetは基本的に後から追加されたものを優先して表示(重なっている場合は優先して)表示します。複数のWidgetが同一階層にある場合はこのルールが適用されますが、Canvas Panelを利用することで描画順に関係無く指定のWidgetを優先して表示するようなことも可能です。これはWidget同士の深度情報を管理するための値(ZOrder)によって制御することもできます。

[APIドキュメント] UCanvasPanelSlot
[APIドキュメント] UGameViewportClient

 Widgetを表示する時は AddToViewport()を利用するように、Viewportが最終的にそれらのWidgetを登録して管理します。最初に追加され®他時に UGameViewportClient::AddViewportWidgetContentを実行してTreeに登録します。Widgetを削除する際には RemoveFromParent()を利用して UGameViewportClient::RemoveViewportWidgetContentから取り除かれます。それらのWidgetは最終的にレベルの遷移時などに UGameViewportClient::RemoveAllViewportWidgetsから纏めて破棄されます。

以下は同一レイヤーにあるWidgetとZOrderの関連性を示した図です。

1UserWidget内でOverlayのZOrderの違い :左は全て0なので後から追加したWidgetが上にくる、右は後から追加したWidgetのZOrderが小さいので先に追加したWidgetが前面に来るケース
2020-06-04_11h50_46.png

UserWidget同士のZOrderの違い :左は全て0なので後から追加したUser Widgetが上にくる、右は上記のケースと同じで先に追加したWidgetが前面に来るケース
2020-06-04_11h50_56.png

2. ZOrderの指定と変更

 ZOrderを変更する事で簡単に描画順番を変更することが可能です。ただしそれらを指定/変更するには以下のような制約があります。

・User Widget
動的な変更は提供していません。AddToViewportで生成時か、Designer上での指定のみです。
・Widget
動的な変更はCanvas SlotからSetZOrderで可能、静的な変更はDesigner上での指定が可能です。

2020-06-04_12h02_33.png

動的にUser Widgetの変更する方法についてはデフォルトではありませんが、以下のブログのやり方が参考になるかと思います。
https://sunghwanpark.github.io/unreal/30/

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0