如何让Godot4全屏游戏适配所有屏幕且无黑边?
Godot 4 不同宽高比屏幕全屏适配指南
无需代码的基础适配设置
Godot 4 内置了完善的屏幕拉伸适配系统,大部分场景不用写代码就能搞定:
- 打开项目设置 → 显示 → 窗口 → 拉伸:
- 模式(Mode):选
keep_aspect或keep_aspect_centerkeep_aspect:保持游戏基础比例,超出屏幕的部分会被裁剪,无黑边但边缘内容可能被遮挡keep_aspect_center:保持比例,画面居中显示,屏幕比例不符时会出现上下/左右黑边,完全保留游戏内容
- 拉伸(Stretch):设为
viewport,这是最常用的适配方式,视口会根据屏幕比例调整,游戏内元素不会被拉伸变形 - 内容缩放(Content Scale):可设置最小/最大宽高比限制,比如限制在16:9到21:9之间,避免极端比例下的适配问题
- 模式(Mode):选
- 全屏模式设置:在项目设置 → 窗口 → 全屏模式里,选
exclusive(独占全屏,性能更优)或borderless(无边框窗口全屏,切换灵活),按需选择即可
自定义适配的代码方案
如果需要更灵活的控制(比如动态调整相机视野、UI布局),可以通过代码实现:
示例:动态调整视口适配目标比例
假设游戏基础比例是16:9,以下代码可监听窗口尺寸变化,自动调整视口大小:
func _ready(): # 监听窗口尺寸变化事件 DisplayServer.window_size_changed.connect(_on_window_resized) # 初始化时执行一次适配 _on_window_resized() func _on_window_resized(): var window_size = DisplayServer.window_get_size() # 设定目标宽高比(这里用16:9) var target_aspect = 16.0 / 9.0 var current_aspect = window_size.x / window_size.y if current_aspect > target_aspect: # 屏幕比目标更宽,按高度适配视口宽度 get_viewport().size = Vector2(window_size.y * target_aspect, window_size.y) else: # 屏幕比目标更高,按宽度适配视口高度 get_viewport().size = Vector2(window_size.x, window_size.x / target_aspect)
UI适配补充
UI元素建议使用锚点(Anchors)和容器控件(如 HBoxContainer、VBoxContainer、MarginContainer),让UI自动跟着屏幕边缘或中心位置调整,避免比例变化时UI错位。
项目基础宽高比的选择建议
- 优先选16:9作为基础比例:这是当前PC、主机、主流手机的通用比例,适配范围最广,后续调整成本最低
- 如果要兼顾宽屏设备(如21:9显示器):可在项目设置的拉伸选项里,将最大宽高比设为2.333(21/9≈2.333),最小宽高比保持1.778(16/9≈1.778),这样宽屏会按比例扩展,不会拉伸
- 避免使用极端比例(如4:3):这类比例在现代宽屏设备上会出现大量黑边,影响玩家体验
内容的提问来源于stack exchange,提问作者user21840008
相关产品推荐
相关产品推荐

