Unity穿透射线法:解决鼠标射线检测被碰撞器遮挡的问题

在Unity中,如果鼠标射线检测被碰撞器遮挡,可以手动发射穿透射线,获取所有碰撞器,然后根据Tag筛选目标对象。

private void Update()
{
    FollowCursor();

    if (Input.GetMouseButtonDown(0)) // 鼠标左键点击
    {
        // 将鼠标位置转换为世界坐标
        Vector2 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        // 使用 Physics2D.Raycast 检测鼠标位置
        RaycastHit2D hit = Physics2D.Raycast(mousePosition, Vector2.zero);

        // 如果检测到碰撞器
        if (hit.collider != null)
        {
            // 检查碰撞器的 Tag 是否为 "PutBox"
            if (hit.collider.CompareTag("PutBox"))
            {
                print("检测到 PutBox 碰撞器");

                // 获取碰撞器所在的 GameObject 的 PutBox 组件
                PutBox putBox = hit.collider.GetComponent<PutBox>();
                if (putBox != null)
                {
                    // 调用 OnPutClick,并传入 putBox 参数
                    HandManager.instance.OnPutClick(putBox);
                }
                else
                {
                    print("碰撞的对象没有 PutBox 组件");
                }
            }
        }
    }
}

posted @ 2025-01-01 22:46  xiins  阅读(8)  评论(0编辑  收藏  举报