检测输入了哪个碰撞器
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");
}
所以我找不到任何方法来帮助我。如果有人知道,谢谢!!!
这根本不起作用,因为 RaycastHit
和 Physics.Raycast
用于 3D 碰撞器。对于 2D 碰撞器,应使用 RaycastHit2D
和 Physics2D.Raycast
。此外,为了检查对象是否附加了 BoxCollider2D
或 PolygonCollider2D
,使用了 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 对撞机一起使用。
我有一个包含 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");
}
所以我找不到任何方法来帮助我。如果有人知道,谢谢!!!
这根本不起作用,因为 RaycastHit
和 Physics.Raycast
用于 3D 碰撞器。对于 2D 碰撞器,应使用 RaycastHit2D
和 Physics2D.Raycast
。此外,为了检查对象是否附加了 BoxCollider2D
或 PolygonCollider2D
,使用了 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
的新事件系统。请参阅我的