Works in Unreal Engine 5.0 to 5.8 on Windows, macOS and Linux. Updated November 2026.
Quick answer: Blueprints can’t open a new operating-system window on their own. Use a few lines of C++:
- Create an
SWindowwithSNew. - Add it with
FSlateApplication::Get().AddWindow. - Put your UMG widget inside it with
SetContent(MyWidget->TakeWidget()).
The window shows UI. To show a second 3D view in it, render a Scene Capture 2D to a texture and display it in an Image widget.
When you need this
Second windows are common in apps rather than games: a control panel on one screen and the output on another, a stage show with an operator view, a DAW-style tool with floating panels, a dashboard. Unreal can do it in a packaged build, but there’s no Blueprint node for it.
The C++ way
Add "Slate", "SlateCore" and "UMG" to your module’s PublicDependencyModuleNames in its Build.cs. Then:
#include "Framework/Application/SlateApplication.h"
#include "Widgets/SWindow.h"
#include "Blueprint/UserWidget.h"
void UMyWindowSubsystem::OpenSecondWindow(TSubclassOf WidgetClass)
{
UUserWidget* Widget = CreateWidget(GetWorld(), WidgetClass);
TSharedRef Window = SNew(SWindow)
.Title(FText::FromString(TEXT("Control Panel")))
.ClientSize(FVector2D(800.0f, 600.0f));
FSlateApplication::Get().AddWindow(Window);
Window->SetContent(Widget->TakeWidget());
SecondWindow = Window;
SecondWindowWidget = Widget;
}
Keep SecondWindow as a TSharedPtr<SWindow> member and SecondWindowWidget as a UPROPERTY() so the widget isn’t garbage collected. To close it, call SecondWindow->RequestDestroyWindow().
Put it on the second monitor
Move the window after creating it with Window->MoveWindowTo(Position). The monitor positions come from FSlateApplication::Get().GetDisplayMetrics(Metrics), where Metrics.MonitorInfo lists each screen and its work area.
Showing 3D in the second window
A new window only draws Slate and UMG. For a second camera view:
- Place a Scene Capture Component 2D where the second camera should be.
- Set its Texture Target to a Render Target asset.
- Show the render target in an Image widget inside the second window.
Each scene capture renders the scene again, so expect a performance cost, especially at high resolution.
Things to know
- Input in the second window goes to its widgets. Gameplay input still goes to the main game window.
- Closing the main window quits the game, and second windows close with it.
- Mobile and consoles have one screen, so this is a desktop feature.
We do this in our Enhanced UI plugin.
FAQ
Does it work in Play in Editor? Yes. The window opens as a separate window next to the editor.
Can I drag widgets between windows? Not with plain SWindow. You’d need your own drag-and-drop logic.
Blueprint-only project? Add one C++ class (Tools > New C++ Class) for the code above, or use a plugin that exposes windows to Blueprints.