Unity oncollisionenter не работает

Содержание
  1. Unity oncollisionenter не работает
  2. Re: OnCollisionEnter не работает.
  3. Re: OnCollisionEnter не работает.
  4. Re: OnCollisionEnter не работает.
  5. Re: OnCollisionEnter не работает.
  6. Re: OnCollisionEnter не работает.
  7. Re: OnCollisionEnter не работает.
  8. Re: OnCollisionEnter не работает.
  9. Re: OnCollisionEnter не работает.
  10. Re: OnCollisionEnter не работает.
  11. Re: OnCollisionEnter не работает.
  12. Re: OnCollisionEnter не работает. [РЕШЕНО]
  13. Re: OnCollisionEnter не работает. [РЕШЕНО]
  14. Re: OnCollisionEnter не работает. [РЕШЕНО]
  15. Re: OnCollisionEnter не работает. [РЕШЕНО]
  16. Кто сейчас на конференции
  17. OnCollisionEnter не вызывается в единстве
  18. 6 ответов
  19. OnCollisionEnter() не работает в Unity3D
  20. unity3d не работает OnCollisionEnter2D
  21. 1 ответ 1
  22. Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# unity3d или задайте свой вопрос.
  23. Похожие
  24. Подписаться на ленту
  25. Функции событий столкновений: OnCollisionEnter, OnCollisionEnter2D, OnCollisionStay, OnTriggerEnter
  26. 1 ответ 1
  27. Список функций:
  28. О функциях OnCollision. и их 2D версиях
  29. О функциях-триггерах OnTrigger. и их 2D версиях
  30. О переводе в «спящее» состояние

Unity oncollisionenter не работает

alex_ey 07 янв 2012, 09:12

Создал в редакторе два объекта, повешал на оба объекта Sphere Collider, на одном из объекте добавил скрипт из примера: http://unity3d.com/support/documentatio . =Collision

при столкновении этих объектов ничего не происходит. т.е. входа в функцию OnCollisionEnter вообще не происходит.

Re: OnCollisionEnter не работает.

Order 07 янв 2012, 10:05

OnCollisionEnter is called when this collider/rigidbody has begun touching another rigidbody/collider.

на одном из объектов должен быть ригид боди

Re: OnCollisionEnter не работает.

alex_ey 07 янв 2012, 10:14

Re: OnCollisionEnter не работает.

trololoid 07 янв 2012, 10:22

Re: OnCollisionEnter не работает.

alex_ey 07 янв 2012, 10:36

Re: OnCollisionEnter не работает.

trololoid 07 янв 2012, 10:45

Re: OnCollisionEnter не работает.

alex_ey 07 янв 2012, 11:00

теперь перемещаю объект таким способом:

function FixedUpdate () <
gameObject.rigidbody.AddForce(Vector3.back * 30);
>

и опять же ничего не работает.

Re: OnCollisionEnter не работает.

trololoid 07 янв 2012, 11:30

Re: OnCollisionEnter не работает.

alex_ey 07 янв 2012, 20:05

Все понятно, все эти заморочки с настройкой колизией были нужны для просчета физики столкновения. Т.е. при столкновении объектов они отскакивают друг от друга.

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

тем более в моей проге не нужно что бы объекты отскакивали друг от друга, нужно что бы они проходили сквозь друг друга, но при этом просчитывалось столкновение.

Re: OnCollisionEnter не работает.

wormik358 07 янв 2012, 22:24

нужно чтоб был включен isTrigger у цели

Re: OnCollisionEnter не работает.

alex_ey 08 янв 2012, 19:27

Re: OnCollisionEnter не работает. [РЕШЕНО]

Order 08 янв 2012, 20:30

Re: OnCollisionEnter не работает. [РЕШЕНО]

Andrew_00001 10 июл 2014, 23:36

А вот и не решено, автору то на его вопрос «Почему OnCollisionEnter не работает?» так и не ответили, а предложили пользоваться другим методом.

У меня только что было подобное, битый час пробился, не реагирует и все тут.
А оказалось: написал OnCollisionEnter с маленькой буквы и Unity восприняла эту функцию, как мою собственную, новую, а не статическую.

Может кому пригодится.

Re: OnCollisionEnter не работает. [РЕШЕНО]

1Nsane 28 сен 2019, 10:41

Читайте также:  Не работает брелок mazda

Re: OnCollisionEnter не работает. [РЕШЕНО]

Saltant 28 сен 2019, 12:17

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot] , Google [Bot] и гости: 28

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB

Источник

OnCollisionEnter не вызывается в единстве

Я проверил почти каждый ответит за это, но это были в основном простые ошибки. Моя проблема в том, что OnCollisionEnter не вызывается даже при столкновении с другим rigidbody.

вот часть, которая не называется:

даже не «столкновение. — появится сообщение. Правильно ли я понял использование, или я что-то забыл?

6 ответов

вы используете 2D-коллайдеры и rigidbodies . Если это так, используйте эту функцию вместо OnCollisionEnter

вам нужно убедиться, что матрица столкновений (Edit->Project Settings->Physics) не исключает столкновений между слоями, к которым принадлежат ваши объекты.

вам также необходимо убедиться, что другой объект имеет : collider, rigidbody и что сам объект или любой из этих компонентов не отключены.

вот что я делаю:

  1. убедитесь, что объект, который вы хотите наехать на цель номера-кинематическая Rigidbody и меш коллайдер. Мой объект hitter-это куб и просто измените его коллайдер на mesh collider
  2. на инспекторе сетки colider убедитесь, что вы включили convex. Пожалуйста см. Больше детали контролера коллайдера сетки здесь

теперь ваш OnCollisionEnter работает. Надеюсь, это вам поможет.

потому что вы неправильно ввели имя класса параметра. это не делает ошибки и не работает. например:

вам просто нужно прикрепить скрипт к тому же объекту, потребность которого обнаруживает столкновение.

Источник

OnCollisionEnter() не работает в Unity3D

У меня есть объект с сетчатым коллайдером и сборщик со сферическим коллайдером. Я хочу, чтобы экземпляр сборника был уничтожен, если они столкнулись.
Я написал следующее в script:

Но он не работает. Я попытался переключить isTrigger на оба объекта.

У меня была та же проблема, что и OnCollisionEnter, которая не была вызвана и нашла этот вопрос.

Для меня проблема заключалась в том, что я делал 2D-игру, поэтому ответ заключается в использовании функции OnCollisionEnter2D.

Убедитесь, что у одного из них имеется некинематический жесткий диск. Взято из документов Unity:

Когда возникает столкновение между двумя коллайдерами и , если хотя бы один из них имеет прикрепленный Rigidbody, три сообщения о столкновении отправляются к прикрепленным к ним объектам. Эти события могут обрабатываться в сценариях и позволяют создавать уникальное поведение с использованием или без использования встроенного ядра NVIDIA PhysX.

Если вы хотите, чтобы ваш OnCollisionEnter был вызван, убедитесь, что:

(a) Оба объекта имеют прикрепленный коллайдер.

(b) Ни один из объектов не является триггерным коллайдером (это вызовет функцию OnTrigger, а не OnCollisionEnter)

(c) Один из объектов (не имеет значения, какой из них) является жестким, не кинематическим и нестационарным объектом (второй не должен быть жестким телом).

(d) Из-за вычислительных трудностей MeshCollider может столкнуться с трудностями при столкновении с другим сетчатым коллайдером, использовать их с осторожностью.

(e) Убедитесь, что оба объекта находятся на одном уровне.

Источник

unity3d не работает OnCollisionEnter2D

объект отмечен как триггер — при прохождении через этот коллайдер-триггер на котором висит этот скрипт — другие коллайдеры должны уничтожаться. На этот спрайт также помимо коллайдера добавлен и Rigidbody2d

Читайте также:  Как настроить facebook store shopping

1 ответ 1

Насколько я понял: Есть объект с BoxCollider2d (triger) и Rigidbody2d , на котором весит скрипт с вашим кодом. Есть еще какие-нибудь объекты с BoxCollider2d (triger) и тегом Fire . Нужно сделать так, чтобы при эмм прикосновении к первому объекту эти Fire уничтожались. Код правильный, возможные причины, почему не работает: 1) в теге объекта Fire не совпадает с Fire из скрипта (короче, ошибка в слове). 2) у Rigidbody2d отключена Simulated . Дальше просто не стал экспериментировать. В повешенном на объекте Rigidbody2d ничего не менял, в BoxCollider2d тоже, только триггером сделал, сработало сразу

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# unity3d или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.19.40495

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Функции событий столкновений: OnCollisionEnter, OnCollisionEnter2D, OnCollisionStay, OnTriggerEnter

Этот пост содержит в себе ответы на такие частые вопросы, как:

  • Для чего предназначены и как работают функции: OnCollisionEnter, OnTriggerEnter, OnCollisionEnter2D, OnTriggerStay, OnCollisionExit и подобные;
  • Как их правильно вызывать; (спойлер: никак)
  • Как настроить объект для использования этих функций;
  • Почему они не вызываются;
  • Что они принимают и возвращают;
  • Почему функции OnCollisionStay/OnTriggerStay/. перестают работать спустя несколько кадров при том, что изначально работали, а объект даже не передвигался.

1 ответ 1

Список функций:

В первую очередь перечислим все подобные функции. Всего их 12:

События Collider Trigger
Enter OnCollisionEnter(Collision) OnTriggerEnter(Collider)
Stay OnCollisionStay(Collision) OnTriggerStay(Collider)
Exit OnCollisionExit(Collision) OnTriggerExit(Collider)

Те же функции, но для 2D объектов:

События Collider Trigger
Enter OnCollisionEnter2D(Collision) OnTriggerEnter2D(Collider)
Stay OnCollisionStay2D(Collision) OnTriggerStay2D(Collider)
Exit OnCollisionExit2D(Collision) OnTriggerExit2D(Collider)

! Все ссылки рабочие и направляют на страницу своей функции

О функциях OnCollision. и их 2D версиях

Из документации:

  • OnCollisionEnter вызывается, когда этот Collider 1 /Rigidbody начал соприкосновение с другим Rigidbody/Collider.
  • OnCollisionStay вызывается один раз в кадр для каждого Collider/Rigidbody, который касается другого Rigidbody/Collider.
  • OnCollisionExit вызывается, когда Collider/Rigidbody прекращает контакт с другим Rigidbody/Collider.

Все вышеперечисленные тезисы верны в том числе и для 2D версий функций.

Аргумент:
Все они принимают в качестве первого аргумента — Collision (не путать с Collider ). Класс Collision содержит информацию о точках соприкосновения, скорости воздействия и т.д.

Требования:

  • Оба объекта должны иметь на себе компонент Collider.
  • У обоих объектов в компоненте Collider должно быть ОТКЛЮЧЕНО свойство isTrigger .
  • Хотя бы один из двух объектов должен иметь компонент Rigidbody.
  • У объекта(-ов) с компонентом Rigidbody должно быть ОТКЛЮЧЕНО свойство isKinematic .

Важно:

  1. События столкновений отправляются даже на неактивные компоненты.
  2. События столкновений НЕ отправляются на объекты с отключенным или временно неактивным компонентом Rigidbody.

О функциях-триггерах OnTrigger. и их 2D версиях

англ. trigger [ˈtrɪgə] — спусковой крючок, пусковой сигнал, триггер\

Collider с свойством триггера не является телесным и ни с кем не сталкивается (физически).

Триггер используется как зона, которая способна реагировать на события входа/выхода/нахождения в ней чего-либо и запуска неких сценариев.

Из документации:

  • OnTriggerEnter вызывается, когда Collider other входит в триггер.
  • OnTriggerStay вызывается практически 2 каждый кадр для каждого Collider other, которые соприкасаются с триггером.
  • OnTriggerExit вызывается, когда Collider other перестает соприкасаться с триггером.

Все вышеперечисленные тезисы верны в том числе и для 2D версий функций.

Аргумент:
Все они принимают в качестве первого аргумента — Collider (не путать с Collision ), то есть ссылку на компонент объекта, с которым произошло триггерное столкновение.

Требования:

  • Оба объекта должны иметь на себе компонент Collider.
  • РОВНО один объект (НЕ два) должен быть помечен как триггер (то есть свойство isTrigger должно быть равно true) в компоненте Collider.
  • Хотя бы один из двух объектов должен иметь компонент Rigidbody.

Важно:

  1. Функции-триггеры вызываются в FixedUpdate после непосредственного входа в триггер/выхода из триггера и т.д., поэтому объекты, участвующие в столкновении, в момент вызова функции-триггера могут уже находиться не той позиции, где были в момент столкновения.
  2. Функции-триггеры не являются непосредственной частью столкновений, а лишь функцией MonoBehaviour’a.
  3. Функция OnTriggerStay зависит от физического таймера, поэтому нет необходимости вызывать ее каждый кадр — она может вызываться НЕ в каждом кадре.

Помните также о том, что если вы не используете аргументы, указываемые в функциях (Collision other, Collider collider. ), вам следует их опустить: в таком случае ненужные расчеты не будут производиться. Например:

О переводе в «спящее» состояние

Многие могли сталкиваться с такой ситуацией: на объекте висит Collider, Rigidbody, всё настроено как надо, на объект повешен скрипт с функцией OnCollisionStay, OnTriggerStay или их 2D версиями. Однако при нахождении объекта в коллайдере, эти функции вдруг перестают работать! А если в них поместить Debug.Log для дебага, оказывается, что спустя несколько десятков кадров, объект просто перестает выполнять свою функцию, выводы в консоль прекращаются, и объект, который даже не двигался, будто засыпает! Почему такое происходит?

Дело в том, что Rigidbody действительно может засыпать!

Когда Rigidbody двигается медленнее определенной скорости, считается, что он остановился. После этого объект будет переведен в «спящий» режим. Это сделано для оптимизации: ресурсы процессора не будут расходоваться на обновление Rigidbody, пока он не «проснется» (т.е. снова придет в движение)

В некоторых случаях (например, когда передвижение физического объекта производится через т.н. «телепортацию»), объект может не проснуться, хотя должен. В таком случае его можно принудительно разбудить функцией WakeUp.

Сноски:
1 Здесь и далее под компонентом Collider понимается любой тип коллайдера, любой его наследник. То есть вы можете использовать BoxCollider, SphereCollider, CapsuleCollider, любые 2D коллайдеры: BoxCollider2D, CircleCollider2D — или любой другой коллайдер, соответствующий вашим нуждам.

2 OnTriggerStay вызывается практически каждый кадр, потому что она зависит от физического таймера, и нет необходимости вызывать ее каждый кадр.

Источник

Оцените статью