OnTriggerEnter2D无法正常工作

时间:2018-05-19 15:52:08

标签: c# collision unityscript unity3d-2dtools

如果它与子弹发生碰撞,我正试图摧毁敌人。但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);
        }
    }
}

子弹

bullet prefab inspector bullet prefab inspector

敌人

enemy inspector enemy inspector

3 个答案:

答案 0 :(得分:2)

如果它是与您想要使用OnCollisionEnter2D的另一个碰撞的实际对象。触发器适用于无法与之碰撞的对象,您只想知道它们是否重叠。

答案 1 :(得分:0)

尝试在对撞机而不是子弹上切换isTrigger。

请参阅本文档,了解如何创建2d对撞机:how to destroy an item after collision

答案 2 :(得分:0)

您好,这是我的第一篇帮助文章,迟到了两年半……但是我遇到了类似的问题,也许可以帮助其他人。如果您有“敌人”脚本,请尝试此操作。我使用smash这个词来避免内置破坏或破坏之类的词。

使用此调用:在<>内将对象“标签”放置在<>之间以破坏对象。 在这种情况下为敌人

collision.GetComponent <敌人>()。Smash();


在“敌人”脚本中,使用IEnumerator“协程”

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

在“敌人”脚本中调用此协程: 注意: animator是对Unity Animator的引用

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

向您的游戏对象添加一个名为smash的触发器。 您应该能够销毁像这样的东西。

  • 泰勒

注意:在阴影中使用了很长时间的Stack Overflow,这是我的第一篇文章,如果我对任何事情有错,我希望得到纠正。只是想帮助。 *认为这是解决当前答案的另一种方法。