不知道如何在Unity3D中使用OnCollisionEnter

时间:2016-08-04 21:35:40

标签: c# unity3d

我的OnCollisionEnter方法有问题,我不知道它为什么不能正常工作。

这是我的代码:

    void OnCollisionEnter(Collision col){

    if (col.gameObject.name == "Bullet" && !bulletEnter)
    {
        Debug.Log(enemyLives);
        enemyLives = enemyLives - 1;

        if (enemyLives == 0)
        {
            Destroy(gameObject);
            //Modificamos el GameManager e incrementamos el dinero que poseemos tras la muerte de Enemy.
            GameManager.Manager.currentGold(enemyGold);
        }

        bulletEnter = true;


    }
    else if (col.gameObject.name == "OtherBullet" && !bulletEnter) {
        enemyLives = enemyLives - 2;
        if (enemyLives == 0)
        {
            Destroy(this.gameObject);
            GameManager.Manager.currentGold(enemyGold);
        }

        bulletEnter = true;

    }
}

//Cuando sale la colision lo ponemos a false, esto lo realizamos para que unicamente exista un choque con los coliders.
void OnCollisionExit(Collision col)
{
    bulletEnter = false;
}

正如你在那里看到的那样,当Bullet到达Enemy时,触发器应该被激活但是它不起作用,我正在使用" Debug.Log"用于检查它是否进入方法内部,但它没有。

在这里,我还添加了检查员的图片。

enter image description here

1 个答案:

答案 0 :(得分:1)

我为此创建了一个简单的场景,并很快发现了您的问题。取消选中Enemy GameObject的Box Collider上的是触发器属性。现在应该按预期调用OnCollisionEnter

您的代码几乎没有其他改进:

1 。使用CompareTag而不是按名称检查。只需将if (col.gameObject.name == "Bullet" && !bulletEnter)更改为if (col.transform.CompareTag("Bullet") && !bulletEnter)即可。

2 。还有,

void OnCollisionExit(Collision col)
{
    bulletEnter = false;
}

这不是一个好的逻辑,因为任何与 Enemy 相撞的东西都会被视为子弹。在将OnCollisionEnter设置为bulletEnter之前,请检查它是否与false函数中的子弹一样。这可能会在将来阻止其他问题。