Враги не сталкиваются друг с другом

У меня есть 3 врага, созданные из одного и того же префаба, которые не сталкиваются друг с другом.

У сборных игровых объектов есть капсульные коллайдеры и твердое тело. Включены как гравитация, так и кинематика, и все коллайдеры срабатывают. Их основная функция - преследование персонажа игрока. По мере того как они это делают, в данный момент все они сходятся в одной точке и в конечном итоге перекрывают друг друга. Как мне сделать так, чтобы они столкнулись друг с другом?

Моя иерархия следующая:

Враги не сталкиваются друг с другом

Настройка скелета приведена ниже:

Враги не сталкиваются друг с другом

Датчик атаки настроен так:

Враги не сталкиваются друг с другом

И это мои настройки матрицы столкновений

Враги не сталкиваются друг с другом

stackoverflow.com/help/mcve
Tomáš Filip 23.10.2018 09:59

Здесь практически нет информации, с которой можно было бы работать. Пожалуйста прочтите страницу, указанную выше, и отредактируйте сообщение, чтобы мы могли помочь вам лучше

Ryolu 23.10.2018 10:01

@Tofik хотел бы сказать, вставляя ссылку, что для нас было бы очень полезно увидеть минимальный, полный и проверяемый пример.

Noel Widmer 23.10.2018 10:02

@NoelWidmer Да, извините, надо было объяснить.

Tomáš Filip 23.10.2018 10:03

Для всех, кто говорит, что нам не хватает информации: его проблема не в кодировании, а в вопросе единства. Скорее всего, с этой проблемой нет ни одной строчки кода. OP не может опубликовать минимальный пример, кроме публикации единого проекта. Если вы не понимаете этого, читая вопрос, значит, вы недостаточно хорошо знаете Unity, чтобы судить

Basile Perrenoud 23.10.2018 10:11

На всякий случай я опубликовал свой код и снимок экрана с моими объектами и там инспектором.

BigBoiBurl 23.10.2018 10:15

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

Ryolu 23.10.2018 10:45

Ваш коллайдер не настроен как запускаемый, и установка силы тяжести не влияет на кинематику. С кинематикой вы управляете движением с помощью сценария, а не физического движка.

Jan 23.10.2018 16:42

Где код?

Jan 23.10.2018 16:50

Если это не проблема программирования, возможно, лучше выложить на gamedev.stackexchange.com или superuser.com

TylerH 24.10.2018 16:21

Да для Разработка игр и определенно нет для Суперпользователя.

JJJ 24.10.2018 17:09

Связанное мета-сообщение: Вопросы Unity3d часто закрываются из-за слишком широкого.

kenorb 25.10.2018 18:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
12
1 522
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Проблема в том, как вы настраиваете объекты:

  • Кинематический означает, что объект сам установит свои значения. Два кинематических объекта не будут сталкиваться (они не позволяют объекту указывать им, что делать)
  • Курок означает, что объект не сталкивается. Он просто запускает функцию, которую вы можете использовать в коде. Снимите этот флажок, чтобы увидеть столкновения

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

Привет, Базиль. Если я выключаю кинематику, объекты проваливаются через пол, и у меня есть триггер Enter в моем коде, чтобы справиться с врагами, сталкивающимися с пулями игроков.

BigBoiBurl 23.10.2018 10:21

Коллайдер, являющийся триггером, НИКОГДА не столкнется. Если вы хотите видеть столкновения, но все еще имеете метод в вашем коде, используйте вместо этого onCollisionEnter

Basile Perrenoud 23.10.2018 10:43
Ответ принят как подходящий

Итак, у вас есть Kinematic Rigidbody Trigger Collider, который сталкивается с другим Kinematic Rigidbody Trigger Collider, как показано здесь сообщения о столкновении единства, он должен работать.

как насчет ваших сталкивающихся слоев? по умолчанию конфликтует со значением по умолчанию? (проверьте вкладку физики)

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

ответы в комментариях:

* капсульный коллайдер: при преобразовании вашего скелета со слоем «по умолчанию», а не триггером

сферический коллайдер: при пустом преобразовании, которое является дочерним со слоем «AttackSensors» или чем-то еще, это является триггером.

на матрице коллизий отключите коллизии между слоями "AttackSensor", это сэкономит вам производительность, избегая коллизий между вашими датчиками атаки.

таким образом вы можете получить:

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

  2. триггер, который запускает событие при столкновении с твердым телом другого скелета. *

Нет, не должно, это спусковой крючок, они никогда не сталкиваются.

Basile Perrenoud 23.10.2018 10:41

посмотри себе стол :)

victor dabija 23.10.2018 10:44

да, действительно, триггер против триггера находится в этой таблице в разделе «Сообщения триггера отправляются при столкновении», это означает отсутствие видимого столкновения, а только сообщение триггера.

Basile Perrenoud 23.10.2018 10:45

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

victor dabija 23.10.2018 11:06

Итак, мы согласны с тем, что ему нужен коллайдер, который не является триггером, чтобы на самом деле видеть столкновение (без перекрытия). Было непонятно, извините. Добавление второго коллайдера наверняка сделает это.

Basile Perrenoud 23.10.2018 11:08

Хорошо, в нынешнем виде мой скелет столкнулся с простым игровым объектом куба, заданным коллайдером коробки и твердым телом (триггер не отмечен). Тем не менее, два скелета (враги) все еще перекрываются. Я изменил OnTriggerEnter на on Collision Enter, и эта функция кодов работает, позволяя мне отключить триггер is для коллайдера капсулы. Любые идеи :)

BigBoiBurl 23.10.2018 11:22

Не уверен, что понимаю, что вы имеете в виду, говоря об использовании двух слоев?

BigBoiBurl 23.10.2018 11:26

Я отредактировал ответ, объясняющий эти слои, так как в комментарии нет нулевых символов

victor dabija 23.10.2018 11:36

@victordabija Я отредактировал сообщение, включив в него скриншоты моей иерархии скелетов, инспектора, инспектора датчика атаки и того, как коллайдеры выглядят в игре. Потому что по-прежнему не удается заставить их столкнуться.

BigBoiBurl 23.10.2018 12:06

ЭТО РАБОТАЕТ СПАСИБО ТАК БЫЛО ПРОСТО, не тикающая кинематика

BigBoiBurl 23.10.2018 12:35

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

Другие вопросы по теме