在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 组件");}}}}
}