Если на главный объект вешаю Rigidbody, урон по дочернему с Collider не проходит

Я создал пустой GameObject, в нём создаю другой пустой GameObject, на него вешаю Collider и прикрепляю скрипт Health, урон проходит. Если на главный объект вешаю Rigidbody, урон не проходит. Собственно почем?

В отладке скрипт не заходит в OnTriggerEnter.

Если на дочерний объект с Collider тоже повесить Rigidbody, урон снова проходит.

public int maxHealth = 100;
public int currentHealth = 100;
public HealthBar healthBar;

private void Start()
{
    healthBar.SetMaxHealth(maxHealth);
}

private void OnTriggerEnter(Collider other)
{
    Bullet bullet = other.gameObject.GetComponent<Bullet>();

    if (bullet)
    {
        TakeDamage(20);

        if (currentHealth == 0)  Destroy(gameObject);
    }
}

private void TakeDamage(int damege)
{
    currentHealth -= damege;
    healthBar.SetHealth(currentHealth);
}

Обычно хоть какая-то визуализация проблемы лучше чем совсем никакая:

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Виталий Тодоров

Так и не понял в чём прикол с Rigidbody, но проблему решил повесив, нанесение урона не на Health а на пулю, сделал отдельный скрипт с таким содержанием:

private void OnTriggerEnter(Collider other)
{
    //Нужно что бы получить какой урон наносит пуля
    Bullet bullet = gameObject.GetComponent<Bullet>();
    //Нужно для получения 
    TakeDamage objectTakeDamage = other.gameObject.GetComponent<TakeDamage>();
    Health healthOther = other.gameObject.GetComponent<Health>();
    //Дли проверки что родитель пули и текущего объекта не одн и тоже (что бы не было само урона).
    GameObject objectOther = other.transform.root.gameObject;
    GameObject objectThis = transform.root.gameObject;

     if ((objectOther != objectThis) && objectTakeDamage)
    {
        healthOther.currentHealth -= bullet.damege * objectTakeDamage.armor;
        //Меняем значение HealthBar
        healthOther.healthBar.SetHealth(healthOther.currentHealth);
        Destroy(this.gameObject);

        if (healthOther.currentHealth <= 0) Destroy(objectOther);
    }
}

А на Collider объекта, который должен получать урон, повесил класс TakeDamage, что бы на него тригерился урон. (Вообще TakeDamage можно было бы сделать пустым, но я в него armor запихнул)

→ Ссылка
Автор решения: Виталий Тодоров

В общем есть более правильное решение. Суть проблемы была в том, что на Collider не висел isTarget, а если я весил isTarget, то объект проваливался под Plane. И я понимаю что это глупо, но я не понимал что для вызова OnTriggerEnter нужна галка isTarget, на объекте с которым взаимодействует пуля... В общем ладно.

Решение: создать два объекта с Collider, на одно включить isTarget и на него повесить скрипт, а на втором isTarget не включать, за счёт второго Collider объект не будет проваливаться.

→ Ссылка