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

如何在Godot 4.2中获取网格实例尺寸以实现物体居中放置?

在Godot 4中获取物体尺寸实现中心摆放的方法

核心尺寸获取方式

Godot 4移除了get_size(),不同类型节点的尺寸获取要对应不同属性:

  • 2D视觉节点(Sprite2D、TextureRect等):用rect_size属性直接获取,比如$Sprite2D.rect_size
  • 3D网格节点(MeshInstance3D):通过网格的包围盒获取尺寸,代码示例:$MeshInstance3D.mesh.get_aabb().size,如果有缩放,记得乘以节点的scale值
  • UI控件(Control及其子类):直接访问size属性,比如$Panel.size

实例化.tscn的影响

实例化.tscn生成的节点,获取尺寸的逻辑和手动创建的节点完全一致。注意要在节点初始化完成后(比如_ready()生命周期函数内)访问尺寸,避免因节点未加载完成导致的错误。

尺寸变化时自动更新中心

要实现修改尺寸后自动重算中心,可通过信号监听或手动触发:

  • 2D节点:监听rect_size_changed信号,示例代码:
    func _ready():
        $Sprite2D.connect("rect_size_changed", self, "_on_size_updated")
    
    func _on_size_updated():
        # 计算新中心并调整位置
        var half_size = $Sprite2D.rect_size / 2
        $Sprite2D.rect_position = target_grid_position - half_size
        # 这里的target_grid_position是你的算法生成的中心位置
    
  • 3D节点:如果是修改网格本身,监听mesh_changed信号;如果是缩放节点,在缩放后手动调用计算函数:
    func scale_mesh(new_scale: Vector3):
        $MeshInstance3D.scale = new_scale
        _recalculate_center()
    
    func _recalculate_center():
        var mesh_size = $MeshInstance3D.mesh.get_aabb().size * $MeshInstance3D.scale
        var half_size = mesh_size / 2
        $MeshInstance3D.global_position = target_global_center - half_size
    

额外提示

如果需要获取包含子节点的整体尺寸:

  • 2D节点用get_global_rect().size
  • 3D节点用get_global_aabb().size

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:40:06