Files
XUniWindowController/Documentation/XUniWindowController.md
2026-06-14 22:49:28 +08:00

3.8 KiB

XUniWindowController

XUniWindowController is a Unity native plugin that provides comprehensive standalone application window control for Windows and macOS builds.

It is a UPM package port of UniWindowController by Kirurobo.

Usage

Add the UniWindowController component to any GameObject in your scene. Access it via:

var winc = UniWindowController.current;
winc.isTransparent = true;
winc.isTopmost = true;
winc.windowSize = new Vector2(1280, 720);

Properties

Property Type Description
isTransparent bool Enable/disable window transparency
alphaValue float Window opacity (0.0 ~ 1.0)
isTopmost bool Keep window always on top
isBottommost bool Keep window always on bottom
isZoomed bool Maximize/restore window
isClickThrough bool Enable/disable mouse click-through
windowPosition Vector2Int Get/set window position (screen coordinates)
windowSize Vector2Int Get/set window size (pixels)
clientSize Vector2Int Get client area size (read-only)
allowDropFiles bool Enable/disable file drag-and-drop
hitTestType HitTestType Click-through detection mode
transparentType TransparentType Transparency algorithm
shouldFitMonitor bool Fit window to a specific monitor
monitorToFit int Target monitor index

Events

Event Description
OnStateChanged Fired when window style, z-order, or size changes
OnMonitorChanged Fired when display configuration changes (resolution, monitor count)
OnDropFiles Fired when files are dragged and dropped onto the window

Samples

Import samples via Package Manager > XUniWindowController > Samples.

The following samples are included:

  • Menu — Navigation menu for browsing all sample scenes
  • SimpleSample — Minimal setup demonstrating basic window control
  • UiSample — Complete UI with toggles, sliders, dropdowns for all window properties
  • Fullscreen — Fullscreen mode with right-click context menu and a 3D snowman scene
  • FileDialog — Native file open/save dialog integration

Technical Details

Windows Architecture

The plugin uses LibUniWinC.dll (C++ Win32 DLL) to control window behavior through native Win32 API calls:

  • SetWindowLong / GetWindowLong — Window style modification (borderless, layered, click-through)
  • SetWindowPos — Position, size, and Z-order (topmost/bottommost)
  • DwmExtendFrameIntoClientArea — DWM alpha transparency
  • SetLayeredWindowAttributes — ColorKey transparency mode
  • SetWindowsHookEx / custom WNDPROC — Window message interception (file drop, display change, resize)
  • DragAcceptFiles — File drag-and-drop
  • GetOpenFileNameW / GetSaveFileNameW — Native file dialogs

macOS Architecture

The plugin uses LibUniWinC.bundle (Swift / Cocoa) to control window behavior through Cocoa APIs:

  • NSWindow.styleMask — Borderless mode
  • NSWindow.level — Z-order (topmost/bottommost)
  • NSWindow.isOpaque / backgroundColor — Transparency
  • NSWindow.ignoresMouseEvents — Click-through
  • NSDraggingDestination protocol — File drag-and-drop
  • NSOpenPanel / NSSavePanel — Native file dialogs
  • constrainFrameRect method swizzling — Free window positioning
  • NotificationCenter — Window state change observation

Package Contents

Location Description
Runtime/Scripts/ Core C# scripts (UniWindowController, UniWinCore, FilePanel, etc.)
Runtime/Plugins/ Native plugin binaries (.dll for Windows, .bundle for macOS)
Editor/Scripts/ Editor extensions (Inspector UI, batch build, PlayerSettings validation)
Samples~/ Sample scenes and scripts