我的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"用于检查它是否进入方法内部,但它没有。
在这里,我还添加了检查员的图片。
答案 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
函数中的子弹一样。这可能会在将来阻止其他问题。