Closed1

EditorUtilityWidgetのRestore処理でハマってた話

KTA552KTA552

EditorUtilityWidgetのRestore処理でハマってた話

こんな感じでEUWのBP自体をハード参照してコンフィグに保存していた。

UPROPERTY(EditAnywhere, BlueprintReadWrite)
UEditorUtilityWidgetBlueprint* Widget;

そうするとEditorを再起動したり(LevelEditor自体のRestore処理が走る)、同じEUWをContentBrowserから右クリック→Run Editor Utility Widgetした際にEditorがクラッシュしてしまうという問題が発生していた。
(正確にはASSERTで止まるがEUWが開けなくなってしまう)

下記のようにSoftObjectPathでハード参照せずにパスだけ持たせるようにした。
それでクラッシュは起きず、EUWも開けるようになった。
実際に今までWidgetで必要としていたインスタンスはWidgetPath.TryLoad()することで実際に読み込むようにしている。

UPROPERTY(EditAnywhere, BlueprintReadWrite)
FSoftObjectPath WidgetPath;

Widget内で保持しているWidgetTreeがnullになっていることでアサートは発生していた。
恐らくだけどハード参照してるがWidget内で必要としているWidgetTreeはTransient属性が付いていたので読み込みが半端になってしまっていたのかなと想像している。
実際WidgetTreeを作成する処理には入ってきていなかった。

このスクラップは6ヶ月前にクローズされました