Godot4.0的浮动游戏工作区自动全屏的问题
Table of Contents
在 Godot 4.0 中,当屏幕分辨率小于项目设置中指定的窗口大小,Godot 会自动将主窗口强制切换为全屏模式,这是一种为防止窗口内容显示不完整而设计的行为,但这对于想要保持“浮动窗口”状态(非全屏)的人来说是个问题。
✅ 目标:
保持浮动窗口模式(Windowed),即使当前屏幕分辨率小于设置的窗口大小。
🎯 解决思路
Godot 引擎中这个行为目前是默认的“安全机制”,但你可以通过如下方法来避免它强制全屏:
✅ 方法 1:运行时手动设置窗口大小并强制浮动模式
在你的主脚本中(例如 autoload.gd
或 Main.gd
)添加如下代码,确保窗口总是以“窗口模式”运行,并强制缩小尺寸:
// 使用 C# 版本
using Godot;
public partial class Main : Node
{
public override void _Ready()
{
// 强制取消全屏
DisplayServer.WindowSetMode(DisplayServer.WindowMode.Windowed);
// 获取屏幕尺寸
Vector2I screenSize = DisplayServer.ScreenGetSize();
// 获取当前项目设置的窗口大小
Vector2I targetSize = new Vector2I(1280, 720); // 或从 ProjectSettings 读取
// 如果屏幕太小,动态缩小窗口以避免强制全屏
if (targetSize.X > screenSize.X || targetSize.Y > screenSize.Y)
{
GD.Print("Screen too small, resizing window to fit.");
targetSize.X = Math.Min(screenSize.X - 100, targetSize.X);
targetSize.Y = Math.Min(screenSize.Y - 100, targetSize.Y);
}
// 设置窗口大小
DisplayServer.WindowSetSize(targetSize);
}
}
✅ 说明:
DisplayServer.WindowSetMode(WindowMode.Windowed)
确保不是全屏。- 手动控制窗口大小,防止触发自动全屏逻辑。
- 加入边距避免任务栏遮挡。
✅ 方法 2:项目设置中控制初始窗口大小(推荐搭配方法 1)
-
打开
Project > Project Settings > Display > Window
。 -
设置:
Mode
= WindowedInitial Width / Height
设置为比最小屏幕还小的尺寸(如 960×540)。- 禁用
Resizable
(可选)。
-
关闭 DPI Stretch:将
Display > Window > Dpi > Allow HiDPI
和Stretch Mode
设置为viewport
。
✅ 方法 3:启动脚本中检测并覆盖设置
也可以直接修改 ProjectSettings
值(运行时修改):
ProjectSettings.SetSetting("display/window/size/viewport_width", new_width);
ProjectSettings.SetSetting("display/window/size/viewport_height", new_height);
DisplayServer.WindowSetSize(new Vector2I(new_width, new_height));
注意:这些设置不会保存到
project.godot
文件中,仅对当前运行有效。
🔧 总结
方法 | 效果 | 推荐情况 |
---|---|---|
显式设置 Windowed 模式 | ✅ 保持浮动窗口 | 强烈推荐 |
运行时缩放窗口大小 | ✅ 兼容小屏幕,不强制全屏 | 强烈推荐 |
改 Project Settings | 🟡 静态设置,可能被引擎忽略 | 可搭配使用 |
如你希望构建一个“浮动工具窗口”的小尺寸子窗口,也可以使用 SubViewportContainer
或 DisplayServer.WindowCreate()
创建辅助窗口。
需要我帮你写一个完整的 Godot 4 + C#
启动窗口控制模块吗?可以用于任何项目模板中。