Unity中如何通过C#实现窗口移动至屏幕X轴最小/最大位置?
Unity实现窗口移动到屏幕X轴最小/最大位置
要实现将Unity游戏窗口移动到屏幕X轴的最左(最小位置)和最右(最大位置),可以通过Application.SetWindowPosition结合屏幕分辨率、窗口尺寸的计算来完成,以下是完整的MonoBehaviour脚本实现:
using UnityEngine; public class WindowEdgeMover : MonoBehaviour { // 检测按键触发移动,可根据需求修改为其他触发方式(比如事件、UI按钮) void Update() { // 按A键移动到屏幕最左 if (Input.GetKeyDown(KeyCode.A)) { MoveWindowToLeftEdge(); } // 按D键移动到屏幕最右 if (Input.GetKeyDown(KeyCode.D)) { MoveWindowToRightEdge(); } } // 将窗口移动到屏幕X轴最小位置(最左侧) void MoveWindowToLeftEdge() { // 获取当前主显示器的工作区边界(排除任务栏等系统UI) Display mainDisplay = Display.main; Rect workArea = mainDisplay.systemWidth != 0 ? mainDisplay.workarea : new Rect(0, 0, Screen.currentResolution.width, Screen.currentResolution.height); // 计算窗口左侧对齐屏幕左边界的X坐标 int targetX = (int)workArea.xMin; // 保持窗口Y轴位置不变 int targetY = (int)Application.windowPosition.y; Application.SetWindowPosition(targetX, targetY); } // 将窗口移动到屏幕X轴最大位置(最右侧) void MoveWindowToRightEdge() { Display mainDisplay = Display.main; Rect workArea = mainDisplay.systemWidth != 0 ? mainDisplay.workarea : new Rect(0, 0, Screen.currentResolution.width, Screen.currentResolution.height); // 计算窗口右侧对齐屏幕右边界的X坐标:屏幕右边界 - 窗口宽度 int targetX = (int)(workArea.xMax - Application.windowSize.x); int targetY = (int)Application.windowPosition.y; Application.SetWindowPosition(targetX, targetY); } }
关键细节说明:
- 屏幕工作区适配:使用
Display.main.workarea获取系统实际可用屏幕区域(自动排除任务栏、Dock等占用的空间),如果该值无效(部分平台可能不支持),则 fallback 到当前屏幕分辨率。 - 窗口位置计算:
- 最左位置:直接取工作区的左边界
xMin作为窗口X坐标。 - 最右位置:用工作区右边界
xMax减去窗口自身宽度Application.windowSize.x,确保窗口右侧刚好对齐屏幕右边缘。
- 最左位置:直接取工作区的左边界
- 触发方式:示例中用键盘按键触发,你可以根据FNF模组的需求,修改为通过游戏内事件、UI按钮或节奏触发来调用
MoveWindowToLeftEdge()/MoveWindowToRightEdge()方法。
注意事项:
- 该功能仅在窗口模式下生效,全屏模式下无法移动窗口。
- 若要支持多显示器,可扩展代码获取目标显示器的
workarea,替换Display.main为指定显示器即可。
内容的提问来源于stack exchange,提问作者Duviz 2
相关产品推荐
相关产品推荐

