У меня есть два босса. У обоих я скопировал все их коллайдеры на один компонент, а с остальных компонентов удалил.. и для этих компонентов, где собраны все коллайдеры, сделал проверку на столкновение с ракетой. То есть если игрок стреляет в босса, то коллайдер ракеты сталкивается с одним из коллайдеров босса. И для первого босса столкновение определяется, а для второго почему то нет - ракеты пролетают сквозь него..
public class ShootableBox : MonoBehaviour { public int health; private void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "bullet") { health -= 1; } } }
Босс 1:
Босс 2:
Первый босс летает, поэтом у него в родительском объекте есть анимация, которая по кругу его перемещает вокруг поля боя.
А второй босс ходит по земле с помощью компонента NavMeshAgent, который у него тоже в родительском объекте.
Может снаряды летят слишком быстро и пролетают сквозь коллайдер?
в документации в Details есть некоторые советы по корректному использованию MeshCollider, а вообще да, есть заморочки с MeshCollider
KumoKairo
> Может снаряды летят слишком быстро и пролетают сквозь коллайдер?
С первым боссом нет проблем
greencrazycat
> в документации в Details есть некоторые советы по корректному использованию
> MeshCollider, а вообще да, есть заморочки с MeshCollider
Я у второго пробовал BoxCollider ставить, не помогло
dmitrykozyr
> Я у второго пробовал BoxCollider ставить, не помогло
мы у себя пока отказались от OnCollisionEnter в пользу райкаста, была подобная проблема и не было желание её решать
Кинематики-то висят на боссах?
arcturgray
> Кинематики-то висят на боссах?
Да
Насколько я помню из документации, только convex mesh collider'ы можно использовать вместе с Rigidbody.
А вообще Юнити рекомендует не использовать mesh collider'ы для динамиков, только для статиков, потому что mesh collider'ы стоят дорого, а уж не отмеченные как Convex - очень дорого.
Поэтому тебе лучше сочетать на боссах только примитивы и в крайнем случае convex mesh collider'ы.
Если это не поможет, то можно попробовать для rigidbody ракеты установить Continuous Dynamic, а для боссов - просто Continuous.
Думаю проблема в перемещении летающего босса, я так понимаю ты изменяешь положение transform из под аниматора. Желательно перемещать саму rigidbody, а не transform
Ну и для таких дел обычно еще меняешь fixed timestep в настройках Time
Вроде как чтобы срабатывали OnCollision евенты нужно чтобы хотя бы на одном из объектов был Rigidbody. У рабочего босса возможно у родительских обьектов есть Rigidbody,у другого - нет.
Сделал все как посоветовали, не помогло. Решил проверить имя объекта, с которым сталкивается ракета. Им оказался объект с Rigidbody. А объект с коллайдером - это его дочерний объект (сделал один большой BoxCollider). Не понимаю, почему до дочернего объекта ракета не долетает, ведь коллайдер же у него находится.
Это называется compound collider. Если у какого-то объекта есть Rogidbody, а у его детей, внуков и тп - коллайдеры, то эти коллайдеры действуют как один большой коллайдер родителя.
arcturgray
> Это называется compound collider. Если у какого-то объекта есть Rogidbody, а у
> его детей, внуков и тп - коллайдеры, то эти коллайдеры действуют как один
> большой коллайдер родителя.
Ох уж мне все эти тонкости)))) Заработало, всем спасибо
Тема в архиве.