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

Godot中Viewport节点无法随父节点移动的问题求助

解决Viewport不随父节点移动的问题

问题背景

你在使用Sprite3D加载Viewport纹理时遇到了问题:将Portal1场景移动后,除Viewport及其子节点外,其他节点都正常跟随父节点移动,导致Viewport内的摄像头停留在原位置,无法同步Portal1的位置变化。

核心原因

Godot中的Viewport(Godot 4+为SubViewport)节点默认是独立的渲染容器,不会自动继承父节点的位置、旋转等变换属性,所以父节点移动时它会保持原位。

解决方案

1. 脚本同步父节点变换(最直接有效)

给Viewport节点添加脚本,在每帧同步父节点的全局变换:

# Godot 3.x 版本(Viewport节点)
extends Viewport

func _process(delta):
    # 同步父节点的全局变换
    global_transform = get_parent().global_transform
# Godot 4.x 版本(SubViewport节点)
extends SubViewport

func _process(delta):
    global_transform = get_parent().global_transform

这样Viewport会完全跟随父节点的位置、旋转和缩放变化,其内部的Camera3D也会随之同步移动。

2. 检查Viewport渲染设置

  • 打开Viewport的属性面板,找到Render Target分类:
    • 将Update Mode设置为When Visible或Always(不要设为Never,否则渲染内容不会更新)
    • 确保Size设置与Sprite3D的纹理需求匹配,避免渲染偏移

3. 替代方案:调整节点结构

如果不想用脚本,可以把Viewport的子节点(比如Camera3D)移出Viewport,直接挂在Sprite3D下,然后让Viewport渲染这个Camera3D的视角。这种方式下,Camera3D会自动跟随父节点移动,Viewport只需负责抓取其渲染内容即可。


内容的提问来源于stack exchange,提问作者TheJalfireKnight

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:10:34