Это не должно работать вообще, потому что RaycastHit
и Physics.Raycast
используются для 3D-коллайдеров.Для 2D коллайдеров следует использовать RaycastHit2D
и Physics2D.Raycast
.Кроме того, для проверки того, к объекту присоединены BoxCollider2D
или PolygonCollider2D
, вместо hit.collider.GetType()
используется функция GetComponent
.Возвращает null
, когда компонент недоступен.
Ваш код raycast должен выглядеть примерно так:
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-коллайдером.