#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:
Похоже, что вам нужно иметь коллайдер на игроке и триггер на предмете. Затем к предмету необходимо прикрепить скрипт, который вызывает функцию на проигрывателе, которая добавляет предметы, а затем в скрипте вы можете уничтожить предмет. Единственная причина, по которой я могу понять, почему это вызывается дважды, заключается в том, что ваш сценарий присутствует как на предмете, так и на игроке.
(Простая схема с некоторым псевдокодом)