检测键入的对撞机

时间:2018-05-31 08:24:24

标签: c# unity3d collider

我有一个包含Polygon Collider的对象,在这个对象中我有一些包含BoxCollider的对象。现在我试图检测何时单击Polygon Collider,以及单击Box Collider时。所以当我点击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");
}

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

1 个答案:

答案 0 :(得分:0)

这不应该起作用,因为RaycastHitPhysics.Raycast用于3D对撞机。对于2D对撞机,应使用RaycastHit2DPhysics2D.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新的事件系统。请参阅我的other答案中的#7 ,了解如何将其与2D对撞机配合使用。