2015-08-12 5 views
1

У меня есть Враг с двумя разными коллайдерами. Первый - Коробчик Коробей, он используется как вражеский hitbox.Ручка единства с несколькими коллайдерами различного назначения

Второй - это Сферный коллайдер, который я хочу использовать для обнаружения игрока и его союзников. Этот коллайдер имеет свойство IsTrigger, установленное в true (BoxCollider этого не делает).

Моя проблема заключается в том, что, когда мой игрок запускает снаряд, он сначала попадает в Сферный коллайдер. Сферный коллайдер рассматривается как hitbox, и мой Враг берет убытки. Вот снаряд скрипт:

void OnTriggerEnter (Collider col) 
{ 
    if (col.gameObject.tag == "Player") 
    { 
     AUnit a = col.gameObject.GetComponent<AUnit>(); 
     if (a != null) 
     { 
      a.takeDamage(damage); 
      if (goThrough == false) 
       Destroy(gameObject); 
     } 
    } 
} 

Мой вопрос довольно прост, как я могу сделать, чтобы обнаружить только обнаружить BoxCollider и игнорировать SphereCollider?

ответ

3

Этого можно достичь, используя Layer-Based Collision Detection.

Вы можете установить плеер на один слой, и игрок снаряда другой слой.
Вы можете сделать двумя слоями, игнорируя друг друга в обнаружении столкновения.

+0

Я согласен со слоем-столкновением, но наблюдаю за тем, что вы не хотите, чтобы игрок находился на другом уровне, но просто это SphereCollider, или ваш снаряд никогда не обнаружит BoxCollider, чтобы вызвать урон. Добавьте пустого ребенка, чтобы держать SpereCollider и его логику в другом слое, чем уровень игрока и баллистической логики;) – Frohlich

+0

@Frohlich точно. Более того, добавление пустого дочернего элемента и не помечение его как родителя также работает. –

+0

Если вы не хотите иметь дружественный огонь, вы действительно должны иметь дружественные снаряды, игнорируя товарищеские игры, а вражеские снаряды игнорируют врагов. –

Смежные вопросы