3.8 KiB
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 transparencySetLayeredWindowAttributes— ColorKey transparency modeSetWindowsHookEx/ customWNDPROC— Window message interception (file drop, display change, resize)DragAcceptFiles— File drag-and-dropGetOpenFileNameW/GetSaveFileNameW— Native file dialogs
macOS Architecture
The plugin uses LibUniWinC.bundle (Swift / Cocoa) to control window behavior through Cocoa APIs:
NSWindow.styleMask— Borderless modeNSWindow.level— Z-order (topmost/bottommost)NSWindow.isOpaque/backgroundColor— TransparencyNSWindow.ignoresMouseEvents— Click-throughNSDraggingDestinationprotocol — File drag-and-dropNSOpenPanel/NSSavePanel— Native file dialogsconstrainFrameRectmethod swizzling — Free window positioningNotificationCenter— 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 |