Как мне проверить тег игрового объекта, когда я сталкиваюсь с ним?

#c# #unity3d #variables #tags #collision

Вопрос:

Мой код таков:

     private void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.CompareTag ("bullet"))
        {
            UI.lives--;
        }
        if (collision.gameObject.tag == "life")
        {
            UI.livePart  ;
        }
    }
 

Я пробовал два разных метода заставить его работать, но ни один из них на самом деле не работает правильно.
Для верхнего, когда мой объект игрока впервые сталкивается с игровым объектом с тегом «пуля», он должен уменьшить мое целое число «жизней» на 1.

Для второго он должен увеличить еще одно целое число «livePart» на 1, когда оно впервые столкнется с игровым объектом с тегом «жизнь».

Пользовательский интерфейс-это код, в котором хранятся переменные «lives» и «livePart».

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

1. у вас был дополнительный компонент коллайдера ?

2. @TimChang да, у них у всех есть коллайдеры.

3. Вы проверили, что OnCollisionEnter ( ... ) на самом деле вызывается и isTrigger не выбрано в Collider компоненте!!!! Если эти проверки выполнены правильно, то, похоже, первый if clause -лучший способ сделать это 🙂

4. @nIcEcOw нужно ли мне твердое тело для работы коллайдера? если нет, то это должно быть столкновение. ни один из них не настроен на триггеры.

5. @CocoWaff: По крайней мере, у одного из сталкивающихся игровых объектов должно быть «Жесткое тело». Найдите часть описания коллайдера. Онкологический центр ( … ) док.

Ответ №1:

Одна вещь, которую следует проверить, заключается в том, что в документации упоминается

Примечания: События столкновения отправляются только в том случае, если к одному из коллайдеров также прикреплено некинематическое жесткое тело.

Если вам посчастливилось проверить «Является ли кинематическим» в инспекторе под жестким телом, то вы не получите событий столкновения.

Кроме того, на всякий случай, если это новая информация, прикрепление отладчика к вашим сценариям, как показано здесь, действительно может помочь. Например, вы можете установить точку останова в OnCollisionEnter функции, чтобы убедиться, что она когда-либо вызывается.

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

1. Мой игровой объект динамичен, и спасибо, что указали на инструмент точки останова, оказывается, что моя функция OnCollisionEnter даже не вызывается. хотя я не могу понять, почему. есть какие-нибудь советы о том, почему это не может быть названо? у всех моих объектов есть коллайдеры, и коллайдеры на поражаемом объекте работают идеально. Я, вероятно, удалю этот вопрос позже, так как кажется, что я все время фокусировался на неправильной части проблемы.

2. Также я бы рекомендовал использовать CompareTag как более эффективный

3. есть ли шанс, что вы могли бы поделиться проектом или небольшим образцом с такой же настройкой?

4. Эй, @CocoWaff! Может быть, вы могли бы попытаться увеличить размер коллайдера, чтобы проверить, вызывает ли он, наконец, OnCollisionEnter. У меня была такая же проблема в проекте, и у меня есть подсказка, что столкновение происходит между 2 кадрами или что-то в этом роде, что не вызывает событие. надеюсь, это может вам помочь!