How to Open a Second Window or Use a Second Monitor at Runtime (UE5)

Table of Contents

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++:

  1. Create an SWindow with SNew.
  2. Add it with FSlateApplication::Get().AddWindow.
  3. 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<UUserWidget> WidgetClass)
{
	UUserWidget* Widget = CreateWidget<UUserWidget>(GetWorld(), WidgetClass);

	TSharedRef<SWindow> 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:

  1. Place a Scene Capture Component 2D where the second camera should be.
  2. Set its Texture Target to a Render Target asset.
  3. 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.

Related tutorials