嘿,我在射弹的预制件上有这个脚本,它应该在与某些东西碰撞时被破坏。好吧,我的问题是,当它与某些东西碰撞时,这个方法永远不会被触发,我不知道为什么。我什至进行了调试,但它从未出现在上面。射弹具有刚体(运动学)和箱式碰撞器!他要碰撞的东西也有碰撞器。
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
运动学 Rigidbody2D 只会与动态 Rigidbody2D 碰撞 体型。例外情况是,如果 Rigidbody2D.useFullKinematicContacts 设置为 true,在这种情况下它将与所有其他 Rigidbody2D 主体类型发生碰撞。
https://docs.unity3d.com/ScriptReference/RigidbodyType2D.Kinematic.html
尝试将
Body Type
设置为 Dynamic
并查看 OnCollisionEnter
是否执行。
或
向另一个碰撞器添加动态
Rigidbody2D
复制与您工作过的完全相同的代码,我的猜测是您在 GameObject 上使用 Rigidbody 而不是 Rigidbody2D 组件。
对于到达这里并且可能很难调试此问题的其他人,在将脚本从
OnTriggerEnter2D
更改为 OnCollisionEnter2D
时需要小心,因为人们会收到 Collider2D
作为 arg
,并且另一个是Collision2D
。 Visual Studio 不会给出任何警告,很容易错过。
我知道已经一年多了。但我遇到了同样的问题,测试了所有内容(花了 3 个小时尝试修复它)...然后我尝试将“void OnCollisionEnter2D”放在“Update”功能之前...并且...它起作用了。
我的对象发生碰撞(相互弹跳),但该功能没有被触发。
很像乔治·森(George Mori),对我来说,没有更新功能导致它无法触发。 添加一个空的更新函数使其工作。这很奇怪,因为我正在学习教程,但根本没有更新功能。 我使用的是 2019.3 的测试版,所以可能只是一个错误。
你的问题是因为你把OnCollisionEnter2D函数写在了void update里面,修改一下,写在void update外面,你的问题就解决了。