UE5.8でのObjectMixerの挙動の変更による問題

問題点:

UE5.8だとObjectMixerに本来隠蔽されているレベル上のアクターが表示されてしまいます。

Outlinerの方では隠蔽されているのですが、ObjectMixer側のみ表示されます。

ソースコードを見たのですが直接的に隠蔽されているアクターを非表示にするような項目が見つかりませんでした。

何か対策は無いでしょうか?よろしくお願いいたします

[Attachment Removed]

再現手順
前提:

・EditorUtilityWidgetにOutlinerと同等の物を表示したい(アクターの表示、選択を行いたい)

・現状はObjectMixerを使用してObjectMixerFilterにAActorを指定しています

[Attachment Removed]

お世話になっております。

大変ご迷惑をおかけしております。

5.7→5.8の過程で、挙動の変更が入ってしまったようです。現在、これが意図的な変更かどうか社内で確認を行っております。

大変恐縮ですが、さしあたりエンジン側に以下のパッチをあてていただくことは可能でしょうか?

Engine/Plugins/Editor/ObjectMixer/ObjectMixer/Source/ObjectMixer/Private/Views/List/Modes/ObjectMixerOutlinerHierarchy.cpp 815行目付近

 	if (bShouldCreateActorItem)
 	{
 		// Force the actor creation regardless of whether it passes the current filters, as one of its children did
-		const bool bForce = true;
+		const bool bForce = bWouldReturnAnyChildItemsBeforeFiltering;
 		if (const FSceneOutlinerTreeItemPtr ActorItem =
 			Mode->CreateItemFor<FObjectMixerEditorListRowActor>(
 				FObjectMixerEditorListRowActor(Actor, GetCastedMode()->GetSceneOutliner()), bForce))

これで問題が回避され、UE5.7時代と同じ挙動になるかと思います。

以上、よろしくお願いいたします。

[Attachment Removed]

ご回答ありがとうございます。

こちら解決できましたが、​この変更が意図的なものかどうかについてもご教授いただければと思います。

お手数をおかけしますが、引き続きよろしくお願いいたします。​

[Attachment Removed]

対処法をご提示いただき、ありがとうございます。

ただ現在はプラグインの開発を行っており、エンジン側へのパッチ適用による対応が難しい状況です(ユーザー側でパッチ対応をしていただく必要があり、現実的ではないため)。

エンジン側へのパッチ適用以外の対処方法がございましたら、ご教示いただけますでしょうか。

また、この変更が意図的なものかどうかについても判明次第お教えいただけますと幸いです。

[Attachment Removed]

回答のご確認をありがとうございます。

プラグインのご提供者さまであり、エンジンの改造が解決策につながらない旨、承知いたしました。

ObjectMixer側の実装の問題を、外部側で回避するのはかなり難しいのですが、今回の要件はあくまでEditorUtilityWidgetにOutlinerと同等の物を表示したいというものであり、ObjectMixerはその手段として用いられているということでしたので、もしかするとOutlinerそのものを稼働させるカスタムウィジェットを作成していただくことが解決策になるかもしれません。

​

具体的には下記ような実装をもつUWidgetのサブクラスを作っていただくようなイメージです。

TSharedRef<SWidget> UDisplayableOutlinerWidget::RebuildWidget()
{
	if (GEditor == nullptr)
	{
		return SNew(SSpacer);
	}
 
	FSceneOutlinerInitializationOptions InitOptions;
 
	// The level editor's own outliner passes true (SLevelEditor.cpp); match it so both lists agree.
	InitOptions.bShowTransient = true;
 
	FSceneOutlinerModule& SceneOutlinerModule =
		FModuleManager::LoadModuleChecked<FSceneOutlinerModule>("SceneOutliner");
 
	return SceneOutlinerModule.CreateActorBrowser(InitOptions, GEditor->GetEditorWorldContext().World());
}

​サンプルも添付いたします。一度お試しいただけますと幸いです。

以上、よろしくお願いいたします。​

[Attachment Removed]

お世話になっております。

回答のご確認ありがとうございます。問題を回避できたと聞き、安心いたしました。

変更の意図については内部確認を行っており、少々お時間を頂戴できればと思います。

​

後方互換が失われているという観点から、一旦、社内の不具合報告にも起票いたしました。Public Issueとして承認された場合、

より、状況を追跡いただけます。

なにか状況に動きがあれば当方からもご連絡いたします。

​

以上、よろしくお願いいたします。​

[Attachment Removed]