From f20128a46d01e4e9555ceabee3bc3fb1ba6c85d9 Mon Sep 17 00:00:00 2001 From: Vahab Ahmadvand Date: Sat, 10 Jan 2026 21:36:50 +0100 Subject: [PATCH 1/2] Updated the OnFocusViewport to focus on the actual mesh component in the preview scene --- .../Private/AssetEditor/SimpleAssetViewport.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetViewport.cpp b/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetViewport.cpp index 71ac289..4b6696b 100644 --- a/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetViewport.cpp +++ b/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetViewport.cpp @@ -49,8 +49,7 @@ void SSimpleAssetViewport::OnFocusViewportToSelection() { SEditorViewport::OnFocusViewportToSelection(); - /* TODO: Replace with PreviewMeshComponent->Bounds */ - const FBoxSphereBounds Bounds = FBoxSphereBounds(); + const FBoxSphereBounds Bounds = PreviewScene->PreviewComponent->Bounds; TypedViewportClient->FocusViewportOnBounds( Bounds, false ); } From bf48a91e6dbf7628204284c2e1fb29e7dfc822a8 Mon Sep 17 00:00:00 2001 From: Vahab Ahmadvand Date: Sat, 10 Jan 2026 21:52:55 +0100 Subject: [PATCH 2/2] Add dynamic mesh updating in asset editor preview Introduced UpdateMesh method in FSimpleAssetPreviewScene and hooked it to property changes in FSimpleAssetEditorToolkit. --- .../AssetEditor/SimpleAssetEditorToolkit.cpp | 18 ++++++++++++++++++ .../AssetEditor/SimpleAssetPreviewScene.cpp | 7 ++++--- .../AssetEditor/SimpleAssetEditorToolkit.h | 2 ++ .../AssetEditor/SimpleAssetPreviewScene.h | 2 ++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetEditorToolkit.cpp b/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetEditorToolkit.cpp index d242ae0..804c11b 100644 --- a/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetEditorToolkit.cpp +++ b/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetEditorToolkit.cpp @@ -29,6 +29,9 @@ void FSimpleAssetEditorToolkit::InitAssetEditor(const EToolkitMode::Type Mode, c // Create viewport widget PreviewViewportWidget = SNew(SSimpleAssetViewport, SharedThis(this), CreatePreviewScene()); + + // Once the PreviewScene is constructed, then update the mesh + PreviewScene.Get()->UpdateMesh(SimpleAsset->PreviewMesh); const TSharedRef Layout = FTabManager::NewLayout("SimpleAssetEditorLayoutv1.0") ->AddArea @@ -163,6 +166,8 @@ void FSimpleAssetEditorToolkit::RegisterTabSpawners(const TSharedRef DetailsView = PropertyEditorModule.CreateDetailView(DetailsViewArgs); DetailsView->SetObjects(TArray{ SimpleAsset }); + + DetailsView->OnFinishedChangingProperties().AddSP(this, &FSimpleAssetEditorToolkit::OnFinishedChangingAssetProperties); InTabManager->RegisterTabSpawner("SimpleAssetDetailsTab", FOnSpawnTab::CreateLambda([=](const FSpawnTabArgs&) { @@ -196,6 +201,19 @@ TSharedRef FSimpleAssetEditorToolkit::SpawnTab_Viewport(const FSpawnTa return SpawnedTab; } +void FSimpleAssetEditorToolkit::OnFinishedChangingAssetProperties(const FPropertyChangedEvent& Event) +{ + // If there are more properties, you can check the property name + //const FProperty* const ChangedProperty = Event.Property; + + USimpleAsset* SimpleAssetObject = Cast(GetEditingObject()); + + if (SimpleAssetObject) + { + PreviewScene.Get()->UpdateMesh(SimpleAssetObject->PreviewMesh); + } +} + void FSimpleAssetEditorToolkit::OnClose() { diff --git a/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetPreviewScene.cpp b/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetPreviewScene.cpp index 2d63df8..41bbc0c 100644 --- a/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetPreviewScene.cpp +++ b/Source/AssetEditorTemplateEditor/Private/AssetEditor/SimpleAssetPreviewScene.cpp @@ -16,12 +16,10 @@ FSimpleAssetPreviewScene::FSimpleAssetPreviewScene(ConstructionValues CVS, const //Hide default floor SetFloorVisibility(false, false); - UStaticMesh* PreviewMesh = LoadObject(NULL, TEXT("/Engine/EngineMeshes/Cube.Cube"), NULL, LOAD_None, NULL); FTransform PreviewMeshTransform (FRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f )); { PreviewComponent = NewObject(GetTransientPackage()); - PreviewComponent->SetStaticMesh(PreviewMesh); PreviewComponent->bSelectable = true; AddComponent(PreviewComponent, PreviewMeshTransform); @@ -36,6 +34,9 @@ FSimpleAssetPreviewScene::~FSimpleAssetPreviewScene() void FSimpleAssetPreviewScene::Tick(float InDeltaTime) { FAdvancedPreviewScene::Tick(InDeltaTime); +} - +void FSimpleAssetPreviewScene::UpdateMesh(UStaticMesh* PreviewMesh) +{ + PreviewComponent->SetStaticMesh(PreviewMesh); } diff --git a/Source/AssetEditorTemplateEditor/Public/AssetEditor/SimpleAssetEditorToolkit.h b/Source/AssetEditorTemplateEditor/Public/AssetEditor/SimpleAssetEditorToolkit.h index 07acd00..0a0768c 100644 --- a/Source/AssetEditorTemplateEditor/Public/AssetEditor/SimpleAssetEditorToolkit.h +++ b/Source/AssetEditorTemplateEditor/Public/AssetEditor/SimpleAssetEditorToolkit.h @@ -43,6 +43,8 @@ class FSimpleAssetEditorToolkit : public FAssetEditorToolkit, public FNotifyHook TSharedRef SpawnTab_Viewport(const FSpawnTabArgs& Args) const; + void OnFinishedChangingAssetProperties(const FPropertyChangedEvent& Event); + private: USimpleAsset* SimpleAsset; diff --git a/Source/AssetEditorTemplateEditor/Public/AssetEditor/SimpleAssetPreviewScene.h b/Source/AssetEditorTemplateEditor/Public/AssetEditor/SimpleAssetPreviewScene.h index 5b2ed40..47a41ce 100644 --- a/Source/AssetEditorTemplateEditor/Public/AssetEditor/SimpleAssetPreviewScene.h +++ b/Source/AssetEditorTemplateEditor/Public/AssetEditor/SimpleAssetPreviewScene.h @@ -17,6 +17,8 @@ class FSimpleAssetPreviewScene : public FAdvancedPreviewScene virtual void Tick(float InDeltaTime) override; + void UpdateMesh(UStaticMesh* PreviewMesh); + TSharedRef GetEditor() const { return EditorPtr.Pin().ToSharedRef();