OnTriggerEnter2D вызывается

Я пытаюсь уничтожить врага, если он сталкивается с пулей. Но OnTriggerEnter2D не работает. Я пытался решить эту проблему и искал ответы часами, но не могу найти проблему.

Вражеский сценарий

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyManager : MonoBehaviour
{
    [SerializeField]
    private Transform target;
    [SerializeField]
    private float speed;


    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
    }

    void OnTriggerEnter2D(Collider2D collision)
    {
        Debug.Log("Colliding with trigger");
        if (collision.CompareTag("bullet"))
        {
            Debug.Log("I got hit");
            Destroy(gameObject);
        }
    }
}

Пуля

инспектор префабов пулиинспектор префабов пули

Враг

инспектор враговинспектор противника


person Lucas    schedule 19.05.2018    source источник
comment
Когда вы попробовали OnCollisionEnter2D, вы также изменили параметр на Collision2D?   -  person MyiEye    schedule 23.05.2018


Ответы (3)


Если это реальный объект, который сталкивается с другим, вместо этого вы хотите использовать OnCollisionEnter2D. Триггеры предназначены для объектов, с которыми нельзя столкнуться, и вы просто хотите знать, перекрываются ли они.

person PhonicUK    schedule 19.05.2018

Попробуйте переключить isTrigger на коллайдер вместо пули.

Пожалуйста, обратитесь также к этой документации о том, как создать 2D-коллайдер: как уничтожить элемент после столкновения

person Hilal Arsa    schedule 19.05.2018

Здравствуйте, это мой первый справочный пост, и он опоздал на 2 с половиной года... но у меня была аналогичная проблема, и, возможно, я мог бы помочь кому-то еще. Если у вас есть скрипт Enemy, попробуйте это. Я использую слово «разбить», чтобы избежать встроенных слов, таких как «уничтожить» или «сломать».

Используйте это для вызова: внутри ‹ › поместите объекты Tag между ‹ ›, чтобы уничтожить объект. Враг в данном случае

столкновение.GetComponent‹ Враг ›().Smash();


В сценарии Enemy используйте сопрограмму IEnumerator.

IEnumerator SmashCo()
{
    yield return new WaitForSeconds(.3f);
    this.gameObject.SetActive(false);
}

Вызовите эту сопрограмму внутри скрипта Enemy: Примечание: аниматор — это ссылка на аниматор Unity

public void SmashEnemy()
{
    animator.SetBool("smash", true);    // Set the animator Bool for smash
    StartCoroutine(SmashCo());
}

Добавьте триггер под названием smash к вашему игровому объекту. Вы должны быть в состоянии уничтожить что-нибудь вроде этого.

  • Тейлор

Примечание. Долгое время использовал Stack Overflow в тени, это мой первый пост, и я хотел бы, чтобы меня поправили, если я ошибаюсь в чем-либо, спасибо. Просто пытаюсь помочь. * Думал, что это другой подход к текущим ответам.

person Forgetful Coma    schedule 14.12.2020