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

