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

Unity 2D中如何检测目标对象点击?如何忽略Confiner?

解决Unity中OnMouseDown被Confiner遮挡的问题

给你几个实用的解决办法,按需选择:

  • 直接让Confiner不接收射线检测(最简单的方案)
    如果Confiner是UI元素(比如全屏Image),找到它的Image组件,把Raycast Target的勾选去掉,这样UI射线就不会检测到它,目标按钮的OnMouseDown就能正常触发。
    如果是3D物体的Confiner,把它的Layer改成Unity默认的Ignore Raycast层,系统射线会自动忽略这个层的所有物体,完全不影响其他对象的点击检测。

  • 自定义射线检测,只检测目标按钮所在Layer
    如果你需要保留Confiner的其他功能,不想改它的设置,可以手动写射线检测逻辑,只针对目标按钮的Layer:
    3D场景可替换OnMouseDown用这段代码:

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            // 替换成你按钮所在的Layer名字
            int buttonLayer = LayerMask.NameToLayer("ButtonLayer");
            if (Physics.Raycast(ray, out RaycastHit hit, Mathf.Infinity, 1 << buttonLayer))
            {
                // 这里写按钮点击后的逻辑
                Debug.Log("目标按钮被点击");
            }
        }
    }
    

    UI场景则用EventSystem检测:

    using UnityEngine.EventSystems;
    using System.Collections.Generic;
    
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            PointerEventData eventData = new PointerEventData(EventSystem.current);
            eventData.position = Input.mousePosition;
            List<RaycastResult> hitResults = new List<RaycastResult>();
            EventSystem.current.RaycastAll(eventData, hitResults);
    
            foreach (var result in hitResults)
            {
                // 用标签判断目标按钮,也可以换成Layer判断
                if (result.gameObject.CompareTag("TargetButton"))
                {
                    // 处理点击逻辑
                    Debug.Log("目标按钮被点击");
                    break;
                }
            }
        }
    }
    
  • 给Confiner的OnMouseDown留空
    这个方案优先级最低,不推荐:给Confiner挂个脚本,里面的OnMouseDown方法什么都不写。但它只能避免Confiner触发错误逻辑,没法让目标按钮的OnMouseDown触发——因为射线会先检测到最上层的Confiner。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:46:07