嘿,我在弹丸的预制件上有这个脚本,当与某物碰撞时应该被摧毁。好吧,我的问题是,当它与某些东西发生碰撞时,这种方法永远不会被触发,我不知道为什么。我什至有那个调试,但它永远不会出现在上面.弹丸有刚体(运动学(和箱式复印机!他应该与之碰撞的东西也有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碰撞 体型。例外情况是,如果 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更新之外写入,你的问题就会得到解决。