Определяет, какой коллайдер набран - PullRequest
0 голосов
/ 31 мая 2018

У меня есть попадание объекта, содержащего 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 голосов
/ 31 мая 2018

Это не должно работать вообще, потому что 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-коллайдером.

...