Пули создаются внутри стены, не запускают OnCollisionEnter2D - PullRequest
3 голосов
void OnCollisionEnter2D(Collision2D col)
    {
        if (col.gameObject.tag == "Wall")
        {
            Destroy(gameObject);
        }
    }

Я использую этот скрипт. Все в порядке, но если мои bullet появляются в Wall, они не реагируют со стеной. Он летит внутри стены. Итак, что я должен использовать для мгновенного уничтожения пули, если она порождает внутри стены?

Метод порождения пули:

Instantiate(bullet1, firepoint1.position, firepoint1.rotation);

enter image description here

1 Ответ

2 голосов
/ 17 мая 2019

Поскольку коллайдеры создают проблемы, когда GameObject создается внутри другого коллайдера.Я рекомендовал вам сначала проверить, будет ли создана пуля внутри стены, и в этом случае напрямую не создавать ее.Я считаю, что это сделает код более эффективным.

Итак, сначала вам нужно добавить Стену в слой ( Здесь , вы можете увидеть, как создать новый слой и назначить ему стену).слой).Передайте его в качестве параметра сценарию, который вы используете для создания экземпляров пуль (например, сценарий танка).

public LayerMask wallLayer;

Вы сохраняете преобразование танка в переменной

// Variable with position of the Tank
Transform _transform;

void Awake () {

    _transform = GetComponent<Transform> ();

}

Следующая вещь, которую вы генерируете Physics2D.Linecast. Источник .Предполагая, что вы используете сценарий, прикрепленный к резервуару GameObject, для выстрела пуль:

// Linecase goes from the tank position to the place where you would be instantiating the bullet
boolean insideWall = Physics2D.Linecast(_transform.position, firepoint1.position, wallLayer);

Тогда вы создаете экземпляр пули только в том случае, если вы не создали его внутри стены.

if(!insideWall)
    Instantiate(bullet1, firepoint1.position, firepoint1.rotation);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...