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

Godot 4.0中如何避免点击UI时触发角色移动逻辑

解决Godot 4.0中UI点击触发角色移动的问题

直接用Godot内置的API就能快速判断点击是否落在UI区域,不用逐个元素检查,以下两种简洁方案任选:

方案一:通过事件的is_handled()判断

在处理鼠标点击的脚本(比如角色控制器或场景根节点)中,先检查点击事件是否已被UI控件处理:

func _input(event):
    if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
        # 若事件已被UI(如按钮)处理,跳过角色移动逻辑
        if event.is_handled():
            return
        # 执行角色移动
        var target_pos = get_global_mouse_position()
        # 这里替换成你的角色移动实现,比如寻路或直接设置位置
        $Character.move_to(target_pos)

方案二:用Viewport的gui_has_point()方法

如果通过Input.is_action_just_pressed检测点击,可直接用视口方法判断鼠标位置是否在UI区域外:

func _process(delta):
    if Input.is_action_just_pressed("left_click"):
        var mouse_pos = get_global_mouse_position()
        # 仅当点击不在UI区域时触发角色移动
        if not get_viewport().gui_has_point(mouse_pos):
            var target_pos = get_global_mouse_position()
            $Character.move_to(target_pos)

推荐第一种方案,它直接利用Godot的事件处理机制,UI控件(如Button)触发点击时会自动标记事件为已处理,无需额外计算位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:22:40