#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 кадрами или что-то в этом роде, что не вызывает событие. надеюсь, это может вам помочь!