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

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

#0
19:43, 11 окт. 2017

У меня есть два босса. У обоих я скопировал все их коллайдеры на один компонент, а с остальных компонентов удалил.. и для этих компонентов, где собраны все коллайдеры, сделал проверку на столкновение с ракетой. То есть если игрок стреляет в босса, то коллайдер ракеты сталкивается с одним из коллайдеров босса. И для первого босса столкновение определяется, а для второго почему то нет - ракеты пролетают сквозь него..

public class ShootableBox : MonoBehaviour
{
    public int health;

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

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

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

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


#1
21:33, 11 окт. 2017

Может снаряды летят слишком быстро и пролетают сквозь коллайдер?

#2
21:49, 11 окт. 2017

class-MeshCollider

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

#3
0:10, 12 окт. 2017

KumoKairo
> Может снаряды летят слишком быстро и пролетают сквозь коллайдер?
С первым боссом нет проблем

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

#4
1:51, 12 окт. 2017

dmitrykozyr
> Я у второго пробовал BoxCollider ставить, не помогло
мы у себя пока отказались от OnCollisionEnter в пользу райкаста, была подобная проблема и не было желание её решать

#5
2:11, 12 окт. 2017

Кинематики-то висят на боссах?

#6
14:44, 12 окт. 2017

arcturgray
> Кинематики-то висят на боссах?
Да

#7
15:23, 12 окт. 2017

Насколько я помню из документации, только convex mesh collider'ы можно использовать вместе с Rigidbody.

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

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

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

#8
18:36, 12 окт. 2017

Думаю проблема в перемещении летающего босса, я так понимаю ты изменяешь положение transform из под аниматора. Желательно перемещать саму rigidbody, а не transform

#9
18:41, 12 окт. 2017

Ну и для таких дел обычно еще меняешь fixed timestep в настройках Time

#10
18:53, 12 окт. 2017

Вроде как чтобы срабатывали OnCollision евенты нужно чтобы хотя бы на одном из объектов был Rigidbody. У рабочего босса возможно у родительских обьектов есть Rigidbody,у другого - нет.

#11
19:31, 12 окт. 2017

Сделал все как посоветовали, не помогло. Решил проверить имя объекта, с которым сталкивается ракета. Им оказался объект с Rigidbody. А объект с коллайдером - это его дочерний объект (сделал один большой BoxCollider). Не понимаю, почему до дочернего объекта ракета не долетает, ведь коллайдер же у него находится.

2 | Не определяется столкновение с коллайдером в юнити
#12
19:43, 12 окт. 2017

Это называется compound collider. Если у какого-то объекта есть Rogidbody, а у его детей, внуков и тп - коллайдеры, то эти коллайдеры действуют как один большой коллайдер родителя.

#13
19:50, 12 окт. 2017

arcturgray
> Это называется compound collider. Если у какого-то объекта есть Rogidbody, а у
> его детей, внуков и тп - коллайдеры, то эти коллайдеры действуют как один
> большой коллайдер родителя.
Ох уж мне все эти тонкости)))) Заработало, всем спасибо

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

Тема в архиве.