2015-03-22 2 views
1

У меня есть GameController объект с квадратным 2D-коллайдером, который покрывает весь экран. Внутри этого GameController есть 7 объектов (Зоны), каждый из которых имеет свой собственный многоугольник. Вот установка:Единство: collider2D.bounds.Contains не работает должным образом

View

Hierarchy

То, что я пытаюсь сделать, это проверить, если щелкнуть положение внутри любого из коллайдеров тех, зона всякий раз, когда я нажимаю внутри большого квадрата коллайдера.

Это OnMouseDown() код сценария в GameController в:

void OnMouseDown() 
{ 
    Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 

    if(this.collider2D.bounds.Contains(mousePos)) Debug.Log ("1st Check"); 

    //'Zones' is a list with all the Zones GameObjects 
    foreach (GameObject zone in Zones) 
    { 
     if(zone.collider2D.bounds.Contains(mousePos)) 
     { 
      Debug.Log ("2nd Check"); 
     } 
    } 
} 

Если не я ВСЕГДА получить "1st Check"? Потому что это избыточно: если OnMouseDown() получил срабатывание, потому что я щелкнул внутри коллайдера, тогда позиция мыши должна находиться внутри коллайдера. Но я никогда этого не делаю, поэтому я думаю, что я что-то упустил здесь около Input.mousePosition или ScreenToWorldPoint().

ответ

1

Проблема заключалась в том, что .collider2D.bounds.Contains(mousePos) получал Vector3, но должен был получать Vector2. Изменено на .collider2D.bounds.Contains(Vector2(mousePos)) и работает как шарм.

Смежные вопросы