OnTriggerEnter2D запускается коллайдерами, не помеченными как триггер?

#c# #unity3d

Вопрос:

Я работаю над стандартной 2D-RPG сверху вниз. На моем объекте игрока у меня есть два коллайдера, один из которых-обычный коробчатый коллайдер 2D, не помеченный как триггер, обрабатывающий столкновения, и он меньше, чем игрок по вертикали. У меня есть еще один коробочный коллайдер 2D, который помечен как триггер, работает как своего рода хитбокс, и он охватывает весь плеер. Собирая предметы, я хотел использовать триггерный коллайдер, поэтому я использовал этот код :

 private void OnTriggerEnter2D(Collider2D other)
{
    if (other.GetComponent<DroppedItem>() != null amp;amp; other.isTrigger)
    {
        Debug.Log("Picked up item.");
        DroppedItem item = other.GetComponent<DroppedItem>();
        inventory.AddItem(item.item, item.itemAmount);
        Destroy(item.gameObject);
    }
}
 

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

Комментарии:

1. является ли этот компонент с этим кодом на нескольких объектах? и да, в общем, этого достаточно, если один из объектов является триггером (см. Коллайдеры -> Матрица действий при столкновении> )

Ответ №1:

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

Простая Схема

(Простая схема с некоторым псевдокодом)