0

我有一个包含多边形碰撞器的对象命中,并且在这个对象中我有一些包含 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");
}

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

4

1 回答 1

0

这根本不应该工作,因为RaycastHit并且Physics.Raycast用于 3D 对撞机。对于 2D 对撞机,RaycastHit2D应该Physics2D.Raycast使用。此外,为了检查对象是否具有BoxCollider2DPolygonCollider2D附加到它,GetComponent使用该函数而不是hit.collider.GetType(). 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 对撞机一起使用。

于 2018-05-31T11:37:56.100 回答