Если на главный объект вешаю 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 объект не будет проваливаться.
