如何在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
相关产品推荐
相关产品推荐

