Monthly Archives: 11月 2024

UE5 ButtonWidgetのEventの発火タイミングメモ(キーボード、ゲームパッドの場合

Widget標準のボタンに付いている5つのイベントを
Unrealの標準機能のWidgetをキーボード、ゲームパッドで操作するNavigation機能を使用した際の挙動です。
※UE5.3.2で確認

OnClicked

Widgetが選択されている状態で決定ボタンを押して、
Widgetの選択を移動せずに決定ボタンを離したときに呼び出されます。

Widgetが選択されている状態で決定ボタンを押して、
Widgetの選択を移動してから決定ボタンを離しても呼びだされません。

OnPressed

Widgetが選択されている状態で決定ボタンを押した時に呼び出されます。

OnReleased

Widgetが選択されている状態で決定ボタンを押下して
同じWidgetを選択している状態で決定ボタンを離したときに呼ばれます
OnClickとまったく同じ挙動。

違いとして
Widgetが選択されている状態で決定ボタンを押下して
Widgetを移動すると移動した瞬間にOnReleasedは呼ばれます(OnCLickedは呼ばれない

OnHovered OnUnHovered

この二つはキーボードでは呼び出されることが確認できませんでした。
マウス専用のイベントなのかもしれない?

UE5 ButtonWidgetのEventの発火タイミングメモ(マウスの場合

Widget標準のボタンに付いている5つのイベントが発火するタイミングです。
※UE5.3.2で確認

OnClicked

マウス左ボタンをWidgetの上で押下し
マウスカーソルがWidgetの上にある状態で離したときに呼び出されます。

マウス左ボタンをWidgetの上で押下し
マウスカーソルがWidgetから移動し、離すと呼ばれません。

OnPressed

マウス左ボタンをWidgetの上で押下したときに呼び出されます。

OnReleased

マウス左ボタンをWidgetの上で押下し、
マウス左ボタンを離したタイミングで呼ばれます
Widgetの上にマウスカーソルがあるかどうかは関係なく呼び出されます。

OnHovered

マウスカーソルがボタンWidgetに乗ったときに呼ばれます

OnUnHovered

マウスカーソルがボタンWidgetの上から外れたときに呼ばれます

ちなみに右クリックだと
ボタンの上で押すとOnUnHoveredが呼ばれ、
離すとOnHoveredが呼ばれます。

UE5 Editorからアセットを選択する際にインターフェイスでフィルタリングする

DataAssetなどでEditorから参照する際に
このようなコードを作成すると

UPROPERTY(EditDefaultsOnly, DisplayName = "敵のアセット")
TSubclassOf<AActor> EnemyAsset;

プロジェクト内すべてのActorがリストアップされてしまい、
検索が大変
設定するアセットを間違える等のミスが考えられます。

これを解消するために
特定のインターフェイスを継承しているクラスのみがリストアップされるようにしたいと思います。

調べると以下のAllowedClasses metaが候補に上がりますがこちらは自作のC++のクラスなどは検知されないようです。(UE5.3)
Unreal側で用意されているクラスをフィルタリングしたいのならこちらを使えば良さそうですね。

meta = (AllowedClasses = "MyClass")

Widget内のListViewなどEntryWidgetClassはUserObjectListEntryを継承した
Widgetのみしか選択できないですね

こちらのソースコードを確認したところ
MustImplement metaが使用されていました。

これを使用して書くと以下のようになりました。
そのままインターフェイスを指定すると
フルパスを指定するように警告ログがでて正常にフィルターされません。
インターフェイスがあるクラスまでのパスを記述する必要があるようです。

UPROPERTY(EditDefaultsOnly, meta = (DisplayName = "敵のアセット", MustImplement = "/Script/TESTProject.MyTest"))
TSubclassOf<AActor> EnemyAsset;

これで結果がフィルタリングされて
見やすくなりますね。
積極的に活用していきたいところです。