Столкновения между элементами пользовательского интерфейса в Unity

Я могу обнаружить столкновение между компонентами пользовательского интерфейса и игровым объектом, если мой холст отображается в мировом пространстве. Здесь я пытаюсь найти конфликт между двумя элементами пользовательского интерфейса (скажем, кнопками пользовательского интерфейса), когда режим рендеринга холста представляет собой наложение пространства экрана.

Я добавил компоненты блочного коллайдера к своим кнопкам пользовательского интерфейса и попытался использовать OnCollisionEnter2D и OnTriggerEnter2D. Но столкновение не обнаружено. Есть ли способ обнаружить столкновение?


person Sunil Nair    schedule 04.04.2016    source источник


Ответы (1)


Вопрос не требует тела кода. Тем не менее, я нашел решение. Для обоих элементов пользовательского интерфейса вам необходимо:

  • Прикрепите компонент rigidbody2d
  • Прикрепите компонент блочного коллайдера
  • отключить гравитацию
  • установите флажок isTrigger.

Теперь в скрипте, прикрепленном к одному из элементов пользовательского интерфейса:

void OnTriggerEnter2D(Collider2D other) 
{
    Debug.Log ("Triggered");
}

Это позволит обнаружить столкновение.

person Sunil Nair    schedule 04.04.2016
comment
Отключение гравитации просто для предотвращения падения элементов пользовательского интерфейса? Или это необходимо для фактического обнаружения столкновения? - person LilaQ; 04.04.2016
comment
Это только для предотвращения падения элементов пользовательского интерфейса. - person Sunil Nair; 05.04.2016
comment
Чувак, я использовал OnCollisionEnter и OnCollisionEnter2D, спасибо за выделение, нам нужно использовать OnTriggerEnter2D, это была деталь, которую я упустил. Вместо того, чтобы изменить гравитацию на ноль, я просто сделал ее кинематической, не нужно просить твердое тело делать какие-либо другие вычисления. Но ваше решение сработало просто отлично, спасибо. - person Fernando Bonet; 27.03.2019