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

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

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

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

Здесь практически нет информации, с которой можно было бы работать. Пожалуйста прочтите страницу, указанную выше, и отредактируйте сообщение, чтобы мы могли помочь вам лучше
@Tofik хотел бы сказать, вставляя ссылку, что для нас было бы очень полезно увидеть минимальный, полный и проверяемый пример.
@NoelWidmer Да, извините, надо было объяснить.
Для всех, кто говорит, что нам не хватает информации: его проблема не в кодировании, а в вопросе единства. Скорее всего, с этой проблемой нет ни одной строчки кода. OP не может опубликовать минимальный пример, кроме публикации единого проекта. Если вы не понимаете этого, читая вопрос, значит, вы недостаточно хорошо знаете Unity, чтобы судить
На всякий случай я опубликовал свой код и снимок экрана с моими объектами и там инспектором.
Если вы просто хотите предотвратить перекрытие скелетов, вы можете назначить ему PhysicsMaterial и придать ему некоторую упругость, чтобы они не перекрывались.
Ваш коллайдер не настроен как запускаемый, и установка силы тяжести не влияет на кинематику. С кинематикой вы управляете движением с помощью сценария, а не физического движка.
Где код?
Если это не проблема программирования, возможно, лучше выложить на gamedev.stackexchange.com или superuser.com
Да для Разработка игр и определенно нет для Суперпользователя.
Связанное мета-сообщение: Вопросы Unity3d часто закрываются из-за слишком широкого.





Проблема в том, как вы настраиваете объекты:
В более общем плане вы должны быть уверены, что понимаете, какие типы объектов могут сталкиваться друг с другом. Взгляните на Документация по коллайдеру. Внизу страницы есть красивая таблица, объясняющая это.
Привет, Базиль. Если я выключаю кинематику, объекты проваливаются через пол, и у меня есть триггер Enter в моем коде, чтобы справиться с врагами, сталкивающимися с пулями игроков.
Коллайдер, являющийся триггером, НИКОГДА не столкнется. Если вы хотите видеть столкновения, но все еще имеете метод в вашем коде, используйте вместо этого onCollisionEnter
Итак, у вас есть Kinematic Rigidbody Trigger Collider, который сталкивается с другим Kinematic Rigidbody Trigger Collider, как показано здесь сообщения о столкновении единства, он должен работать.
как насчет ваших сталкивающихся слоев? по умолчанию конфликтует со значением по умолчанию? (проверьте вкладку физики)
Кроме того, я сделал что-то подобное в этот раз назад, могу ли я предложить вам использовать один коллайдер капсулы для тела скелета (не триггер) и дочерний объект в качестве датчика атаки (коллайдер сферического триггера более пригоден). это поможет вам разделить физику тела и логику атаки.
ответы в комментариях:
* капсульный коллайдер: при преобразовании вашего скелета со слоем «по умолчанию», а не триггером
сферический коллайдер: при пустом преобразовании, которое является дочерним со слоем «AttackSensors» или чем-то еще, это является триггером.
на матрице коллизий отключите коллизии между слоями "AttackSensor", это сэкономит вам производительность, избегая коллизий между вашими датчиками атаки.
таким образом вы можете получить:
каркас с коллайдером тела, который также использует гравитацию (гравитация не применяется к кинематическому твердому телу) и реагирует на столкновения.
триггер, который запускает событие при столкновении с твердым телом другого скелета. *
Нет, не должно, это спусковой крючок, они никогда не сталкиваются.
посмотри себе стол :)
да, действительно, триггер против триггера находится в этой таблице в разделе «Сообщения триггера отправляются при столкновении», это означает отсутствие видимого столкновения, а только сообщение триггера.
да, вот почему его OnTriggerEnter должен работать, но у него есть проблемы с перекрытием врагов, хорошим решением было бы, как я предлагал, использовать 2 коллайдера и отдельные логики, даже лучше, если он использует 2 слоя
Итак, мы согласны с тем, что ему нужен коллайдер, который не является триггером, чтобы на самом деле видеть столкновение (без перекрытия). Было непонятно, извините. Добавление второго коллайдера наверняка сделает это.
Хорошо, в нынешнем виде мой скелет столкнулся с простым игровым объектом куба, заданным коллайдером коробки и твердым телом (триггер не отмечен). Тем не менее, два скелета (враги) все еще перекрываются. Я изменил OnTriggerEnter на on Collision Enter, и эта функция кодов работает, позволяя мне отключить триггер is для коллайдера капсулы. Любые идеи :)
Не уверен, что понимаю, что вы имеете в виду, говоря об использовании двух слоев?
Я отредактировал ответ, объясняющий эти слои, так как в комментарии нет нулевых символов
@victordabija Я отредактировал сообщение, включив в него скриншоты моей иерархии скелетов, инспектора, инспектора датчика атаки и того, как коллайдеры выглядят в игре. Потому что по-прежнему не удается заставить их столкнуться.
ЭТО РАБОТАЕТ СПАСИБО ТАК БЫЛО ПРОСТО, не тикающая кинематика
Использование аниматора Unity обычно заставляет анимированные объекты думать за пределами игрового мира, поэтому на самом деле они являются отдельными сущностями от игры. Однако вы можете использовать raycasting для обнаружения коллайдеров друг друга и с помощью этого метода заставить их сталкиваться друг с другом.