OnCollisionEnter2D没有执行?

时间:2018-07-09 17:29:46

标签: c# unity3d 2d

嘿,我在弹丸的预制件上放了这个脚本,假设该脚本在与某些物体碰撞时会被破坏。好吧,我的问题是,当它与某些东西碰撞时,这种方法永远不会触发,我也不知道为什么。我什至拥有该调试功能,而且它从未出现过。弹丸具有刚体(运动学)和盒大肠菌!他应该撞的东西也有大肠菌病。

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);
    }
}
}

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我认为是因为kinematic

  

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

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

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

OR

将动态Rigidbody2D添加到其他对撞机

答案 2 :(得分:0)

我知道已经超过1年了。但是我遇到了同样的问题,测试了所有内容(花费了3个小时来修复它)...然后我尝试将“ void OnCollisionEnter2D”放在“ Update”功能之前,然后...成功了。

我的对象发生碰撞(彼此反弹),但未触发功能。

答案 3 :(得分:0)

就像乔治·莫里(George Mori)一样,对我来说,没有更新功能会使它无法触发。 添加一个空的Update函数使其生效。这只是奇怪的原因,因为我正在学习教程,而根本没有更新功能。 我正在使用2019.3的Beta版,因此可能只是一个错误。