Обнаружение определенных коллайдеров на моем игровом объекте с помощью OnTriggerEnter2D

#c# #unity3d

#c# #unity3d

Вопрос:

Итак, у меня есть вражеский игровой объект с прикрепленными к нему 2 триггерами. Чего я хочу добиться, так это того, что враг будет выполнять отдельную атаку в зависимости от того, с каким триггером столкнулся игрок. Итак, есть левый триггер и правый триггер, и эти триггеры были сохранены в общедоступном массиве на вражеском игровом объекте. Вот код, который, как я думал, достигнет цели, однако оператор if else всегда возвращает false, когда он должен возвращать true .

 private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "ThePlayer")
        {
            if (collision == DamageTriggers[0])
            {
                LeftClawAttack();
            }
            else if (collision == DamageTriggers[1])
            {
                RightClawAttack();
            }
            else
            {
                Debug.Log("False");
            }
        }
    }
  

Если кто-нибудь может показать мне, что я здесь делаю не так, и помочь мне найти решение этой проблемы, я буду очень признателен.

Комментарии:

1. вы проверили, что ваш массив DamageTriggers был заполнен? кроме того, какой массив представляет собой DamageTriggers?

2. Триггеры повреждения определенно заполнены. Массивы являются BoxCollider2D. Должен ли этот код работать? Если это так, то я, вероятно, допустил небольшую ошибку, которую упустил из виду.

3. я попробую сам и вернусь к вам, я думаю, проблема в том, что вы сравниваете коллайдеры, а не столкновения.

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

Ответ №1:

Благодаря Джейдону Вольфгангу я смог выяснить, почему мой код не работал. Итак, проблема заключалась в том, что я сравнивал боксовые коллайдеры, а не коллизии, поэтому для решения этой проблемы я обнаружил, что вы можете использовать функцию IsTouching()

     private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "ThePlayer")
        {
            if (DamageTriggers[0].IsTouching(collision))
            {
                LeftClawAttack();
            }
            else if (DamageTriggers[1].IsTouching(collision))
            {
                RightClawAttack();
            }
            else
            {
                Debug.Log("False");
            }
        }
    }
  

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

Комментарии:

1. Я уже думал, что вам нужно сделать что-то подобное. я рад, что вы нашли проблему