Godot引擎中3D视口仅能放大无法缩小的适配问题求助
问题解决:Godot中SubViewport/SubViewportContainer无法随父节点缩小
问题分析
你通过监听父节点Resized信号设置self.size = get_parent().size时,组件仅能放大无法缩小,大概率是以下原因:
- SubViewportContainer或SubViewport被设置了最小尺寸(Min Size),限制了缩小的下限
- 仅同步了容器(SubViewportContainer)的尺寸,未同步SubViewport的渲染分辨率,导致容器缩小后SubViewport的尺寸未更新,视觉上无变化
- 父节点尺寸更新时机与信号触发存在延迟,导致获取的父节点尺寸不是最新值
解决步骤
1. 清除最小尺寸限制
打开属性面板,检查以下节点的Min Size属性,确保都设置为(0, 0):
- SubViewportContainer
- SubViewport
2. 同步容器与视口的尺寸
如果脚本挂在SubViewportContainer上,修改信号回调代码,同时更新自身和内部SubViewport的尺寸:
func _on_parent_resized(): # 同步容器尺寸到父节点 self.size = get_parent().size # 同步SubViewport的渲染分辨率到容器尺寸 $SubViewport.size = self.size
3. 优化信号监听时机
如果父节点是Viewport或窗口,改用size_changed信号替代Resized,确保获取到最新尺寸值:
func _ready(): get_parent().connect("size_changed", self, "_on_parent_size_changed") func _on_parent_size_changed(): self.size = get_parent().size $SubViewport.size = self.size
4. 锚点自动适配(可选)
若无需自定义尺寸逻辑,可直接将SubViewportContainer的Anchors Preset设为Full Rect,让它自动填充父节点空间,再绑定SubViewport尺寸到容器尺寸:
func _ready(): $SubViewport.size = self.size self.connect("resized", self, "_on_container_resized") func _on_container_resized(): $SubViewport.size = self.size
以上方法无需依赖项目的Stretch设置,可实现真正的分辨率适配而非固定比例缩放。
内容的提问来源于stack exchange,提问作者Dushyant Deshwal
相关产品推荐
相关产品推荐

