Капсульный коллайдер Unity C# и твердое тело не запускаются с помощью преобразования.положение для перемещения

#c# #unity3d

Вопрос:

У меня есть 2 простые капсулы. 1 неподвижен, а другой перемещается на ту же плитку на карте с помощью transform.position.

Обе капсулы имеют капсульные коллайдеры и твердые тела. Я попытался удалить твердое тело, но, насколько я могу судить, функция OnCollisionEnter требует, чтобы работало твердое тело.

Мой сценарий, прикрепленный к обоим из них, является простым:

 private void OnCollisionEnter(Collision other)
{
    print("Collision Detected! "   other.gameObject.name);
}
 

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

Кажется, ничто не вызывает столкновения между 2 капсулами. Это должно быть что-то маленькое, чего мне не хватает.

У меня есть тег на обоих объектах, и я пробовал такие вещи, как if(other.gameObject.tag == "myTag") {...} , но это тоже не работает для меня.

Кто-нибудь может заметить мою ошибку? Дайте мне знать, если вам нужно увидеть что — нибудь еще-с удовольствием предоставлю изображения или что-нибудь еще, что поможет. Заранее спасибо!

Моя Иерархия

Компоненты Сетки Капсулы

Выше приведена базовая идентичная иерархия обеих капсул с компонентами, прикрепленными к сетке капсулы. У обоих есть родительские пустые объекты, под которыми они размещены. (Которые сами по себе содержат сценарии, но не коллайдер или твердое тело)

Ответ №1:

Ниже infographic показано, когда будет обнаружено сообщение о столкновении OnCollisionEnter между двумя объектами. Обоим объектам понадобится какой-то коллайдер, и, скорее всего, понадобится Rigidbody .

Матрица столкновений

Вы не захотите устанавливать isTrigger , так как это не заставит его физически реагировать на столкновение, а просто обнаружит, когда произойдет столкновение. Он тоже не позвонит OnCollisionEnter , но позвонит OnTriggerEnter . Установка обоих не в качестве триггеров, добавление коллайдера и предоставление их Rigidbodies должны позволить обнаружить столкновение. Вам также нужно будет прикрепить этот скрипт к одному из объектов, у которых есть коллайдер. Существуют ли другие компоненты на объектах, которые вы используете?

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

1. Я добавлю изображения выше в свой пост в качестве правки.

2. В обеих моих капсулах есть коллайдер капсул и коллайдер твердого тела на сетке капсул. Родитель-это пустой игровой объект с парой сценариев, прикрепленных в обоих случаях. Мне не нужна никакая физика, чтобы произойти, или гравитация, или что-то еще… просто простое обнаружение того, что произошло столкновение, чтобы я мог запустить функцию. (В этом случае распечатайте на консоли или даже отладьте. Войдите в консоль только для начала)

3. Как вы и указывали — я установил оба не в качестве триггеров (isTrigger = false), добавил коллайдер и дал обоим жесткое тело с прикрепленным сценарием — я все еще не могу заставить объекты обнаружить столкновение. Я могу создать короткое видео со ссылкой, если это будет полезно?

4. Как бы глупо это ни звучало — сброс Unity устранил проблему. Спасибо — ваш ответ был правильным.