Author Archives: lovewcycle

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;

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

UE5.3.2 Cook時に Profile (OverlapAll) – Custom Channel Name = ‘GameTraceChannelN’ hasn’t been found ログが出る

Cookした際に

以下の警告が出たときの対応
PackagingResults: Warning: Profile (OverlapAll) - Custom Channel Name = 'GameTraceChannelN' hasn't been found
(Nには6~18の数字が入る可能性がある?)

Config/DefaultEngine.iniを開いて
以下の部分を編集する

+EditProfiles=(Name="OverlapAll"~
から始まる行の警告ログに出ている
Channel="GameTraceChannelN" になっている部分を
Channel="HOGEHOGE" のように自分で設定した名前に変更
OverlapAll以外もログが出ていたら同様に変更する。

本来ならばProjectSettingで設定したときに自動で正しいものに変更されるはずだが何らかの原因でうまく動作しなくなってしまっている。
原因不明
Engine側が管理しているDefaultEngine.iniの部分を直接書き換えるのはあんまり良くなさそう

UE5 Unload Stream Level の完了が呼ばれなかった問題

※この記事はUE5.3.2で確認しています。

動的にLevelを切り替える際に使用するLoadStreamLevel,UnloadStreamLevelノードですが
UnloadStreamLevelノードのCompleteまで処理が走らない問題に遭遇したので原因をメモ。

症状

以下のようにノードを組んだ際に
Unload Stream Levelノードまでは実行されるがCompleteが呼ばれない状態。

この質問と同じ状態ですが解決策がない
https://forums.unrealengine.com/t/unload-stream-level-does-not-continue-and-hangs-on-streaming-level/405656

解決策

この記事に解決策が書いてありました。
https://forums.unrealengine.com/t/bug-unload-stream-level-node-never-completes/373379/4

このノードを組んでいるActorがUnloadするLevelに含まれているためにCompleteまで呼ばれないのが原因でした。
他のLevelに移動したり、PersistantLevelにいれると問題が解消しました。