检测输入了哪个碰撞器

Detects which collider is typed

我有一个包含 Polygon Collider 的对象 hit,在这个对象中我有一些包含 BoxCollider 的对象。现在我试图检测何时单击多边形碰撞器,以及何时单击盒子碰撞器。所以当我点击 Box Collider 时,你应该避开 Polygon Collider。

if (Input.GetMouseButtonDown(0))
{
    RaycastHit hit;
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    if (Physics.Raycast(ray, out hit))

       if (hit.collider.GetType() != typeof(BoxCollider2D))
       {
            Debug.Log("Bad Click");
       }
       else
            Debug.Log("Good Click");
}

所以我找不到任何方法来帮助我。如果有人知道,谢谢!!!

这根本不起作用,因为 RaycastHitPhysics.Raycast 用于 3D 碰撞器。对于 2D 碰撞器,应使用 RaycastHit2DPhysics2D.Raycast。此外,为了检查对象是否附加了 BoxCollider2DPolygonCollider2D,使用了 GetComponent 函数而不是 hit.collider.GetType()。它 returns null 当组件不可用时。

您的光线投射代码应如下所示:

if (Input.GetMouseButtonDown(0))
{
    Camera cam = Camera.main;

    Vector2 wPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    RaycastHit2D hit = Physics2D.Raycast(wPoint, Vector2.zero);

    //Check if we hit anything
    if (hit)
    {
        if (hit.collider.GetComponent<BoxCollider2D>() != null)
        {
            Debug.Log("Bad Click");
        }
        else if (hit.collider.GetComponent<PolygonCollider2D>() != null)
            Debug.Log("Good Click");
    }
}

这应该可以解决您的问题,但我建议您使用带有 OnPointerClick 的新事件系统。请参阅我的 回答中的 #7,了解如何将其与 2D 对撞机一起使用。