You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:58:10