OnCollisionEnter2D 没有被执行?

问题描述 投票:0回答:7

嘿,我在射弹的预制件上有这个脚本,它应该在与某些东西碰撞时被破坏。好吧,我的问题是,当它与某些东西碰撞时,这个方法永远不会被触发,我不知道为什么。我什至进行了调试,但它从未出现在上面。射弹具有刚体(运动学)和箱式碰撞器!他要碰撞的东西也有碰撞器。

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);
    }
}
}
c# unity-game-engine 2d
7个回答
3
投票

我想是因为

kinematic

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

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

尝试将

Body Type
设置为
Dynamic
并查看
OnCollisionEnter
是否执行。

向另一个碰撞器添加动态

Rigidbody2D


1
投票

复制与您工作过的完全相同的代码,我的猜测是您在 GameObject 上使用 Rigidbody 而不是 Rigidbody2D 组件。


1
投票

对于到达这里并且可能很难调试此问题的其他人,在将脚本从

OnTriggerEnter2D
更改为
OnCollisionEnter2D
时需要小心,因为人们会收到
Collider2D
作为
arg
,并且另一个是
Collision2D
。 Visual Studio 不会给出任何警告,很容易错过。


0
投票

我知道已经一年多了。但我遇到了同样的问题,测试了所有内容(花了 3 个小时尝试修复它)...然后我尝试将“void OnCollisionEnter2D”放在“Update”功能之前...并且...它起作用了。

我的对象发生碰撞(相互弹跳),但该功能没有被触发。


0
投票

很像乔治·森(George Mori),对我来说,没有更新功能导致它无法触发。 添加一个空的更新函数使其工作。这很奇怪,因为我正在学习教程,但根本没有更新功能。 我使用的是 2019.3 的测试版,所以可能只是一个错误。


0
投票

你的问题是因为你把OnCollisionEnter2D函数写在了void update里面,修改一下,写在void update外面,你的问题就解决了。


0
投票

enter image description here

也许有人和我一样。我没有意识到日志被隐藏了。我读了2个讨论并尝试了各种方法

© www.soinside.com 2019 - 2024. All rights reserved.