Как определить, какой из коллайдеров столкнулся?

2

Я создаю игру, в которой есть враги, я хочу иметь выстрелы в голову, чтобы у меня было 2 коллайдера: один в голову и один в тело. Я не могу найти какой-либо хороший способ сказать, что есть что в коде.

Я думал о решении, но мне не нравится it- другой тип коллайдера для головы и другой тип для тела (например, многоугольные и коробочные коллайдеры). Это работает, но я не думаю, что это достаточно хорошо (если я хочу добавить больше коллайдеров или иметь два одинаковых типа, которые не будут работать).

virtual protected void OnTriggerEnter2D(Collider2D collider2D)
    {
        if (collider2D.gameObject.tag.Equals("Zombie"))
        {
            Destroy(gameObject);//destroy bullet
            Zombie zombie = collider2D.gameObject.GetComponent<Zombie>();
            if (collider2D is BoxCollider2D)
                zombie.HeadShot(demage);//headshot
            else zombie.BulletHit(demage);//normal hit
        }
    }

Я хочу как-то пометить коллайдеры, чтобы я мог различить их.

  • 0
    Может быть, вы просто можете сделать дочерние объекты для каждого коллайдера?
  • 0
    спасибо, я думаю, я мог бы, но способ пометить коллайдеры гораздо проще, я надеюсь, что это возможно.
Показать ещё 4 комментария
Теги:
unity3d

1 ответ

0

Вам необходимо создать открытые переменные типа BoxCollider2D и назначить коллайдеры. Когда происходит коллизия, вызовите оператор IF внутри OnTriggerEnter, чтобы увидеть, какой из них столкнулся. Это будет работать независимо от того, есть ли другие типы коллайдеров.

public class Example : MonoBehaviour
{
    public BoxCollider2D box01;
    public BoxCollider2D box02;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.IsTouching(box01))
        {
            Debug.Log("1");
        }
        else if(collision.IsTouching(box02))
        {
            Debug.Log("2");
        }
    }
}

isTouching - это метод Unity, который возвращает логическое значение в зависимости от сравниваемого коллайдера.

  • 0
    Да, это то, как я бы сделал это, ха-ха, супер симпел, но решение McCorner могло бы быть лучше
  • 0
    Это простое решение этого вопроса, но если кто-то захочет запутаться, будьте моим гостем. Кстати, если вам нравится ответ, проголосуйте. ;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню