Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Не определяется столкновение с коллайдером в юнити

Не определяется столкновение с коллайдером в юнити

Поделиться
dmitrykozyrПостоялецwww11 окт. 201719:43#0
У меня есть два босса. У обоих я скопировал все их коллайдеры на один компонент, а с остальных компонентов удалил.. и для этих компонентов, где собраны все коллайдеры, сделал проверку на столкновение с ракетой. То есть если игрок стреляет в босса, то коллайдер ракеты сталкивается с одним из коллайдеров босса. И для первого босса столкновение определяется, а для второго почему то нет - ракеты пролетают сквозь него..
public class ShootableBox : MonoBehaviour
{
    public int health;

    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "bullet")
        {
            health -= 1;
        }
            
    }
}

Босс 1:
1 | Не определяется столкновение с коллайдером в юнити

Босс 2:
2 | Не определяется столкновение с коллайдером в юнити

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

Правка: 11 окт. 2017 19:45

KumoKairoПостоялецwww11 окт. 201721:33#1
Может снаряды летят слишком быстро и пролетают сквозь коллайдер?
greencrazycatПостоялецwww11 окт. 201721:49#2
class-MeshCollider

в документации в Details есть некоторые советы по корректному использованию MeshCollider, а вообще да, есть заморочки с MeshCollider

dmitrykozyrПостоялецwww12 окт. 20170:10#3
KumoKairo
> Может снаряды летят слишком быстро и пролетают сквозь коллайдер?
С первым боссом нет проблем

greencrazycat
> в документации в Details есть некоторые советы по корректному использованию
> MeshCollider, а вообще да, есть заморочки с MeshCollider
Я у второго пробовал BoxCollider ставить, не помогло

greencrazycatПостоялецwww12 окт. 20171:51#4
dmitrykozyr
> Я у второго пробовал BoxCollider ставить, не помогло
мы у себя пока отказались от OnCollisionEnter в пользу райкаста, была подобная проблема и не было желание её решать
arcturgrayПостоялецwww12 окт. 20172:11#5
Кинематики-то висят на боссах?
dmitrykozyrПостоялецwww12 окт. 201714:44#6
arcturgray
> Кинематики-то висят на боссах?
Да
arcturgrayПостоялецwww12 окт. 201715:23#7
Насколько я помню из документации, только convex mesh collider'ы можно использовать вместе с Rigidbody.

А вообще Юнити рекомендует не использовать mesh collider'ы для динамиков, только для статиков, потому что mesh collider'ы стоят дорого, а уж не отмеченные как Convex - очень дорого.

Поэтому тебе лучше сочетать на боссах только примитивы и в крайнем случае convex mesh collider'ы.

Если это не поможет, то можно попробовать для rigidbody ракеты установить Continuous Dynamic, а для боссов - просто Continuous.

TokarnПостоялецwww12 окт. 201718:36#8
Думаю проблема в перемещении летающего босса, я так понимаю ты изменяешь положение transform из под аниматора. Желательно перемещать саму rigidbody, а не transform
TokarnПостоялецwww12 окт. 201718:41#9
Ну и для таких дел обычно еще меняешь fixed timestep в настройках Time
SazonoffПостоялецwww12 окт. 201718:53#10
Вроде как чтобы срабатывали OnCollision евенты нужно чтобы хотя бы на одном из объектов был Rigidbody. У рабочего босса возможно у родительских обьектов есть Rigidbody,у другого - нет.
dmitrykozyrПостоялецwww12 окт. 201719:31#11
Сделал все как посоветовали, не помогло. Решил проверить имя объекта, с которым сталкивается ракета. Им оказался объект с Rigidbody. А объект с коллайдером - это его дочерний объект (сделал один большой BoxCollider). Не понимаю, почему до дочернего объекта ракета не долетает, ведь коллайдер же у него находится.

2 | Не определяется столкновение с коллайдером в юнити

arcturgrayПостоялецwww12 окт. 201719:43#12
Это называется compound collider. Если у какого-то объекта есть Rogidbody, а у его детей, внуков и тп - коллайдеры, то эти коллайдеры действуют как один большой коллайдер родителя.
dmitrykozyrПостоялецwww12 окт. 201719:50#13
arcturgray
> Это называется compound collider. Если у какого-то объекта есть Rogidbody, а у
> его детей, внуков и тп - коллайдеры, то эти коллайдеры действуют как один
> большой коллайдер родителя.
Ох уж мне все эти тонкости)))) Заработало, всем спасибо

/ Форум / Программирование игр / Игровая логика и ИИ

2001—2017 © GameDev.ru — Разработка игр