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

如何让两个重叠的Control节点均可接收用户输入

解决Godot中重叠Control节点的输入拦截问题

针对你遇到的两个重叠Control节点(均包含可交互ScrollContainer)的输入拦截问题,不需要直接拆分节点并通过信号同步,以下是几种更高效的解决方案:

  • 调整mouse_filter属性
    将顶层Control节点的mouse_filter设置为PASS。默认情况下Control的mouse_filter为STOP,会拦截所有输入;改为PASS后,顶层Control本身不会阻碍输入传递,但其内部的ScrollContainer等子节点仍会正常响应自身区域内的输入。未被顶层子节点覆盖的区域,输入会自动透传到下层Control节点,同时两个Control的视觉层级依然由z_index控制,完全满足“同时显示+各自交互”的需求。

  • 自定义输入事件分发
    若需要更精细的输入控制(比如特定区域的特殊处理),可以在顶层Control的脚本中重写_gui_input方法,手动判断输入位置并分发事件:

    func _gui_input(event):
        # 替换为你顶层ScrollContainer的节点名称
        var target_scroll = $ScrollContainerTop
        if target_scroll.get_global_rect().has_point(get_global_mouse_position()):
            # 让顶层ScrollContainer处理当前输入
            target_scroll._gui_input(event)
        else:
            # 将输入透传给下层Control节点(替换为实际节点路径)
            $../ControlBottom._gui_input(event)
    
  • 优化节点结构
    如果两个Control的重叠区域仅局限于ScrollContainer,可以将两个ScrollContainer移至同一个父Control节点下,分别设置z_index控制视觉层级,且保持它们的mouse_filter为默认的STOP。这样两个ScrollContainer会各自响应自身区域内的输入,非重叠区域的其他控件也能正常交互,同时保留原有视觉布局。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:35:59