Могут ли 2 collider'а с флагом true в IsTrigger взаимодейс..
|
|
killing002 | Дата: Среда, 01 Апреля 2020, 00:20 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Приветствую. В ютубе наткнулся на серию уроков по созданию 2.5d платформера. Стало интересно и в итоге наткнулся на одну из его реализаций обнаружения нанесения урона. А именно: У него на сцене 2 персонажа - player & enemy. Они оба прошли процедуру ragdoll'а , то есть у их костей есть 2 компонента: rigidbody & character joint . После он через скрипт сначала включает флаг IsTrigger у каждого коллайдера на костях, потом к каждой кости (имею ввиду все те кости, которые используются в ragdoll'е) прикрепляет пользовательский скрипт, который описывает 2 метода: OnTriggerEnter() & OnTriggerExit(). В этих методах он и определяет как будет происходить взаимодействие. И в тот момент когда player наносит удар по enemy, видно на видео как удары регистрируются. Вопрос в следующем: Как это возможно?? Ведь в документации ясно сказано, что 2 коллайдера у которых стоят флаги IsTrigger будут всячески игнорироваться движком... Но у этого парня на видео все работает. Я день уже пытаюсь понять как это. Думаю, что в старых версиях юнити это было возможно.. Читал документацию от юнити 2018, и там этого написано не было.. Разъясните, кто тут много знает.. Заранее спасибо. Ссылки: 1) Тут он перемещает методы OnTriggerEnter() & OnTriggerExit() на каждую кость https://www.youtube.com/watch?v=5Vx73Ao6RfQ&list=PLWYGofN_jX5BupV2xLjU1HUvujl_yDIN6&index=28 2) Тут он устанавливает ragdoll(если так можно выразиться) https://www.youtube.com/watch?v=OJFS4Z0tT9A&list=PLWYGofN_jX5BupV2xLjU1HUvujl_yDIN6&index=23
Очень интересно, что за чертовщина творится..
123
Сообщение отредактировал killing002 - Среда, 01 Апреля 2020, 12:21 |
|
| |
drcrack | Дата: Среда, 01 Апреля 2020, 02:24 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| т.к. 2 триггера действительно взаимодействовать не могут, можно предположить что у него есть и другие коллайдеры поэтому я просто промотал первое видео в конец и обнаружил это:
PS
Цитата Я день уже пытаюсь понять как это. это заняло секунд 10
Сообщение отредактировал drcrack - Среда, 01 Апреля 2020, 02:25 |
|
| |
killing002 | Дата: Среда, 01 Апреля 2020, 11:38 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Этот boxcollider не участвует в взаимодействии. В методе OnTriggerEnter(), у него есть условие которое исключает все взаимодействия с этим коллайдером. Так выглядит код который фиксирует взаимодействия:
Код public class TriggerDetector : MonoBehaviour {
private CharacterControl owner;
private void Awake() { owner = this.GetComponentInParent<CharacterControl>(); }
private void OnTriggerEnter(Collider col) { if (owner.RagdollParts.Contains(col)) // Исключает соприкосновения частей ragdoll'a друг об друга { return; }
CharacterControl attacker = col.transform.root.GetComponent<CharacterControl>(); // это жертва if (attacker == null) //Исключает ситуацию, когда жертвы нет { return; }
if (col.gameObject == attacker.gameObject) // Игнорирует collider на самой верхней иерархии (тот самый boxcollider). Игнорирует свой boxcollider и чужие {
Debug.Log(" I TOUCH " + attacker.transform.root.name + " BIG box collider " + transform.root.gameObject); return; }
if (!owner.CollidingParts.Contains(col)) // Если в этом листе нет этого коллайдера то добавить этот коллайдер. { owner.CollidingParts.Add(col); } }
private void OnTriggerExit(Collider attacker) // При выходе из коллайдеров удалять их { if (owner.CollidingParts.Contains(attacker)) { owner.CollidingParts.Remove(attacker); } } }
Может поможет кому.. Этот скрипт висит на каждой кости, участвующей в ragdoll'e
123
Сообщение отредактировал killing002 - Среда, 01 Апреля 2020, 12:19 |
|
| |
LLL | Дата: Среда, 01 Апреля 2020, 18:46 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Могут ли 2 collider'а с флагом true в IsTrigger взаимодействовать?
Да легко. Physics.OverlapSphere, например. И куча еще других вариантов.
Ну а так не, не могут.
Вообще, чем меньше юзаешь физику в скрипте, тем, как не странно, она лучше работает Пример от этого чувака лучше вообще забыть.
|
|
| |
killing002 | Дата: Среда, 01 Апреля 2020, 22:38 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| Цитата LLL ( ) Пример от этого чувака лучше вообще забыть. Это был довольно исчерпывающий ответ.
123
|
|
| |
Otinagi | Дата: Пятница, 03 Апреля 2020, 08:13 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| Странно. Я тоже раньше видел, что нельзя использовать два триггера, и у меня даже с этим была проблема в одном из прошлых проектов, и вот сейчас с ужасом вспомнил, а не допустил ли я и в текущем проекте два флага триггера. Полез смотреть и действительно - у меня на двух объектах стоят флаги триггеров и всё работает....
У меня есть условный враг и пуля игрока. У врага установлен флаг триггер, а в скрипте обрабатывается OnTriggerEnter2D. Здесь же проверяется столкновение с пулей. На пуле игрока также установлен флаг триггер, а также прикреплён Rigidbody2D. Скрипт отвечает лишь за перемещение пули.
Установлена версия Unity 2019.3.7f1.
«Смерти меньше всего боятся те люди, чья жизнь имеет наибольшую ценность.» Иммануил Кант
|
|
| |
k0fe | Дата: Суббота, 04 Апреля 2020, 02:31 | Сообщение # 7 |
BRONX
Сейчас нет на сайте
| Стоит более внимательно читать документацию. В ней это описывается.
https://docs.unity3d.com/ru/current/Manual/CollidersOverview.html
https://docs.unity3d.com/ru/current/Manual/LayerBasedCollision.html
мой стрим, который я редко включаю, но зато на нём я делаю игры
Сообщение отредактировал k0fe - Воскресенье, 05 Апреля 2020, 22:50 |
|
| |
killing002 | Дата: Вторник, 07 Апреля 2020, 15:46 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| Я дважды перечитал данные ссылки и пока ничего. Можно конкретней.. Если вы ведете к тому, что проблема в слоях, то нет.. я все проверил - дело не в этом. Так же в одной их этих ссылок находилась одна очень полезная таблица - "матрица действий коллизии". В ней можно наблюдать, что с чем может взаимодействовать, а что нет. И в ней можно заметить, что Rigidbody Trigger Collider может взаимодействовать с Rigidbody Trigger Collider. В одном месте документации говорится одно, в другом другое, но ровно противоположное.. Либо я тупой, либо да..
123
Сообщение отредактировал killing002 - Вторник, 07 Апреля 2020, 15:50 |
|
| |
drcrack | Дата: Вторник, 07 Апреля 2020, 16:10 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| Перечитал документацию, там говорится что два триггера не могут столкнуться, и ведь это действительно так Столкновение (Collision, OnCollisionEnter, и тд) и OnTriggerEnter это ведь разные вещи Так что твой код должен просто работать т.к. никаких столкновений там не происходит (тем более все тела isKinematic)
Цитата Могут ли 2 collider'а с флагом true в IsTrigger взаимодействовать? Да легко. Physics.OverlapSphere, например. И каким же образом 2 коллайдера взаимодействуют друг с другом, когда их накрывает OverlapSphere?
Сообщение отредактировал drcrack - Вторник, 07 Апреля 2020, 16:11 |
|
| |
killing002 | Дата: Вторник, 07 Апреля 2020, 17:31 | Сообщение # 10 |
почетный гость
Сейчас нет на сайте
| Цитата drcrack ( ) (тем более все тела isKinematic) isTrigger вы хотели сказать.. IsKinematic вовсе предотвращает физические взаимодействия(настройка в rigidbody)
Цитата drcrack ( ) там говорится что два триггера не могут столкнуться Понимание по поводу документации начинает приходить. Но это не как не отменяет того факта, что 2 rigidbody Trigger Collider'a не взаимодействуют. Продолжу поиски.Добавлено (08 Апреля 2020, 21:05) --------------------------------------------- Благодарю всех кто участвовал в этом.. 2 trigger collider'a могут взаимодействовать, но только не в unity версии 2019.3.0a10. Перешел на версию 2019.3.0f6 и все начало работать как часы.. Минус неделя времени..
123
|
|
| |
LLL | Дата: Вторник, 14 Апреля 2020, 00:45 | Сообщение # 11 |
участник
Сейчас нет на сайте
| Цитата killing002 ( ) Перешел на версию 2019.3.0f6 и все начало работать как часы..
юнитек...Добавлено (14 Апреля 2020, 00:59) ---------------------------------------------
Цитата drcrack ( ) И каким же образом 2 коллайдера взаимодействуют друг с другом, когда их накрывает OverlapSphere?
оверлап сфера тут типа триггер
|
|
| |
drcrack | Дата: Вторник, 14 Апреля 2020, 02:47 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| тс зачем-то поставил альфа версию, не обновлял ее, а виноват конечно юнитек
|
|
| |
LLL | Дата: Воскресенье, 26 Июля 2020, 02:15 | Сообщение # 13 |
участник
Сейчас нет на сайте
| Input манагер? Чо, не, не юнитек? И таких косяков мелких и крупных по всюду.Добавлено (26 Июля 2020, 02:19) ---------------------------------------------
Цитата drcrack ( ) тс зачем-то поставил альфа версию, не обновлял ее, а виноват конечно юнитек
Конечно виноват юнитек. Он не предупредил о версии.
|
|
| |