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

Godot中如何检测RichTextLabel内特定文字的鼠标悬浮交互?

Godot中实现RichTextLabel关键词鼠标悬浮交互方案

不用手动计算字符坐标,Godot其实已经提供了现成的方法来处理这个需求,直接用RichTextLabel的meta标签和内置API就能搞定:

核心方法:利用[meta]标签与get_meta_at_position

  1. 给关键词添加meta标记
    在你的XML技能描述里,把需要交互的关键词用[meta]标签包裹,标签里可以存关键词的ID、名称或者直接存描述信息,比如:

    <skill_description>
        [meta=fireball]火球[/meta]造成100点火焰伤害,命中后触发[meta=burn]灼烧[/meta]效果
    </skill_description>
    

    加载XML后,把这段内容设置给RichTextLabel的bbcode_text属性即可。

  2. 检测鼠标悬浮的meta内容
    在RichTextLabel的脚本里,通过_process或者_input函数,用get_meta_at_position方法获取鼠标位置对应的meta数据,不用自己算字符坐标:

    # 假设你有一个用于显示悬浮提示的Label节点$Tooltip
    func _process(delta):
        var global_mouse_pos = get_global_mouse_position()
        var target_meta = get_meta_at_position(global_mouse_pos)
        
        if target_meta:
            # 根据meta数据获取对应的详细描述
            var tip_text = match target_meta:
                "fireball": "火球:消耗20 mana,对单个目标造成100火焰伤害",
                "burn": "灼烧:每秒造成15点伤害,持续5秒",
                _: ""
            
            $Tooltip.text = tip_text
            $Tooltip.visible = true
            # 调整提示框位置,避免超出屏幕
            $Tooltip.global_position = global_mouse_pos + Vector2(15, 15)
        else:
            $Tooltip.visible = false
    

    get_meta_at_position会自动识别鼠标所在位置的meta标签内容,完全省去了手动计算文本坐标的麻烦。

进阶:给关键词添加样式

如果需要给关键词加视觉区分(比如变色、下划线),可以结合[style]标签和meta一起用:

[style=color: #ff7f50][meta=fireball]火球[/meta][/style]

这种方式和XML存储的逻辑适配性最好,不用额外修改脚本逻辑。

关于替代节点

你说得没错,RichTextLabel确实是Godot里唯一支持富文本动态修改和差异化显示的节点,没有更合适的替代方案,用它配合meta标签的方案已经是最简洁高效的了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:54:59