You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Godot自定义六边形节点中居中Label控件?

解决Godot中六边形节点内Label居中的问题

嘿,我之前做六边形网格项目时刚好碰到过一模一样的问题,给你几个简单直接的方案,都能让Label的中心和六边形的(0,0)原点完全重合:

方法1:调整Label的锚点(最推荐)

Godot里Control控件默认的锚点是左上角(0,0),这就是Label会把六边形中心当成自己左上角的根源。我们只需要把Label的锚点改成自身中心(0.5,0.5),再把位置设为(0,0)就行:

  • 编辑器操作:选中Label,在Inspector面板找到Anchor属性,把Horizontal和Vertical都拉到0.5;然后把Position设为(0,0)。
  • 代码实现(比如在六边形节点的_ready()函数里):
    func _ready():
        var center_label = $Label
        center_label.anchor = Vector2(0.5, 0.5)
        center_label.position = Vector2.ZERO
    

这样不管Label的尺寸怎么变化,它的中心都会牢牢和父节点的(0,0)点对齐,完全不用再手动调整。

方法2:手动计算偏移位置

如果你不想修改锚点,也可以通过计算Label的尺寸来偏移它的位置:

  • 编辑器操作:先看Label的Rect Size(比如宽80、高24),然后把Position设为(-40, -12)——也就是尺寸的一半取负数。
  • 代码自动计算(适合Label内容动态变化的场景):
    func _ready():
        var center_label = $Label
        # 等待Label完成布局后获取准确尺寸
        await center_label.frame_post_draw
        center_label.position = -center_label.rect_size / 2
    

这里加await frame_post_draw是为了确保Label已经计算好自身尺寸,避免拿到错误的数值。

方法3:用容器控件自动居中

如果你的六边形节点是Control子类,还可以用容器来简化操作:

  1. 给六边形节点添加一个CenterContainer子节点,把它的Rect Size设为六边形的外接范围(比如和六边形的绘制区域一样大),Position设为(0,0)。
  2. 把Label放到CenterContainer里面,它会自动帮你把Label居中对齐,完全不用手动调位置。

不管用哪种方法,都能完美解决Label中心和六边形中心重合的问题,而且完全不用担心Label进入负坐标区域——Godot对控件在负坐标区域绘制完全支持~

内容的提问来源于stack exchange,提问作者Adrián Arroyo Calle

火山引擎 最新活动