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