unity3d 未执行OnCollisionEnter2D?

mlmc2os5  于 2023-01-21  发布在  其他
关注(0)|答案(6)|浏览(431)

嘿,我有这个脚本在一个预制的炮弹,这是假设被摧毁时,碰撞的东西。我的问题是,当它碰撞的东西,这个方法从来没有触发,我不知道为什么。我甚至有调试,它从来没有出现在它。炮弹有刚体(运动学)和箱冷却!他是假设碰撞的东西也有冷却。

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

niwlg2el1#

我想是因为kinematic
运动学Rigidbody2D将仅与动力学Rigidbody2D实体类型发生碰撞。例外情况是,如果Rigidbody2D.useFullKinematicContacts设置为true,则它将与所有其他Rigidbody2D实体类型发生碰撞。
https://docs.unity3d.com/ScriptReference/RigidbodyType2D.Kinematic.html
尝试将Body Type设置为Dynamic,并查看OnCollisionEnter是否执行。

    • 或**

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

vhmi4jdf

vhmi4jdf2#

复制完全相同的代码,你已经工作,我的猜测是,你是使用刚体,而不是刚体2D组件对你的游戏对象。

hyrbngr7

hyrbngr73#

我知道已经1年多了。但是我遇到了同样的问题,测试了所有的东西(花了3个小时试图修复它)...然后我试着把“void OnCollisionEnter2D”放在“更新”功能之前...结果...它成功了。
我的对象发生碰撞(彼此反弹),但功能没有被触发。

kd3sttzy

kd3sttzy4#

很像乔治森,对我来说,没有一个更新功能使它无法触发。添加一个空的更新功能使它工作。这只是奇怪的,因为我正在遵循一个教程,并没有一个更新功能在所有。我使用的是测试版的2019.3虽然所以可能只是一个错误。

hfsqlsce

hfsqlsce5#

您的问题是因为您在void update中编写了OnCollisionEnter2D函数,修改它并在void update外编写,您的问题将得到解决。

vktxenjb

vktxenjb6#

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

相关问题