我有一个包含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");
}
所以我找不到任何方法来帮助我。如果有人有任何想法,谢谢!
答案 0 :(得分:0)
这不应该起作用,因为RaycastHit
和Physics.Raycast
用于3D对撞机。对于2D对撞机,应使用RaycastHit2D
和Physics2D.Raycast
。另外,为了检查对象是否附加BoxCollider2D
或PolygonCollider2D
,使用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对撞机配合使用。