OnCollisionEnter2D not being executed?



嘿,我在弹丸的预制件上有这个脚本,当与某物碰撞时应该被摧毁。好吧,我的问题是,当它与某些东西发生碰撞时,这种方法永远不会被触发,我不知道为什么。我什至有那个调试,但它永远不会出现在上面.弹丸有刚体(运动学(和箱式复印机!他应该与之碰撞的东西也有colider。

public class ProjectileColision : MonoBehaviour {
public GameObject projectile;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnCollisionEnter2D(Collision2D col)
{
Debug.Log("executed");

if (col.gameObject.tag == "Projectile")
{
Destroy(projectile,0);
}
}
}

我认为这是因为kinematic

运动学刚体2D

只会与动态刚体2D碰撞 体型。例外情况是,如果 Rigidbody2D.useFullKinematicContacts 设置为 true,在这种情况下,它将与所有其他 Rigidbody2D 体型发生碰撞。

https://docs.unity3d.com/ScriptReference/RigidbodyType2D.Kinematic.html

尝试将Body Type设置为Dynamic,看看OnCollisionEnter是否执行。

将动态Rigidbody2D添加到其他碰撞体

复制与您使用的完全相同的代码,我的猜测是您在游戏对象上使用的是Rigidbody而不是Rigidbody2D组件。

对于到达这里并且可能难以调试此问题的任何其他人,在将脚本从OnTriggerEnter2D更改为OnCollisionEnter2D时需要小心,因为一个接收Collider2D作为arg,另一个接收Collision2D。Visual Studio不会给出任何警告,很容易错过。

我知道已经1年多了。但我遇到了同样的问题,测试了所有内容(花了 3 个小时试图修复它(......然后我尝试将"void OnCollisionEnter2D"放在"更新"功能之前......和。。。成功了。

我的对象正在碰撞(相互弹跳(,但函数未被触发。

就像乔治·森一样,对我来说,没有更新功能使它无法触发。 添加一个空的更新函数使其工作。这很奇怪,因为我正在遵循一个教程,而它根本没有更新功能。 我使用的是 2019.3 的测试版,但可能只是一个错误。

你的问题是因为你在void更新中编写了OnCollisionEnter2D函数,修改它并在void更新之外写入,你的问题就会得到解决。

最新更新