在Unity中使用2D碰撞器时,OnCollisionEnter没有被调用

15

我检查了几乎所有关于此问题的答案,但那些大多都是简单的错误和失误。 我的问题是当与其他刚体碰撞时,OnCollisionEnter甚至没有被调用。

这里是没有被调用的部分:

 void OnCollisionEnter(UnityEngine.Collision col) {
        Debug.Log("collision!!!");
        foreach(ContactPoint contact in col.contacts) {
            //checking the individual collisions
            if(contact.Equals(this.target))
            {
                if(!attacking) {
                    Debug.Log("hitting target");
                } else {
                    Debug.Log("dying");
                    //engage death sequence
                }
            }
        }
    }

甚至没有出现“collision!!!”的信息。我是理解错误了吗,还是忘记了什么?


转换;精灵渲染器;盒子碰撞器2D;圆形碰撞器2D;敌人控制器(脚本);刚体2D;动画师;同时还有附着在对象上的组件: - Erik Putz
3
编辑您的帖子以添加此信息,不要将其作为评论添加,因为可能会被忽略。 - Dave
如果您正在使用CharacterController,则不会调用OnCollisionEnter。它有自己的碰撞方法(我现在无法查找并链接)。 - Steven Mills
好的,我设法解决了它。我需要使用碰撞的二维等效形式。不幸的是,我不能回答自己的问题。 - Erik Putz
6个回答

55

你是否正在使用2D碰撞器和刚体?如果是,请使用此函数代替OnCollisionEnter

void OnCollisionEnter2D(Collision2D coll)
    {
        Debug.Log(coll.gameObject.tag);

    }

3

您需要确保碰撞矩阵(编辑 -> 项目设置 -> 物理)不排除您的对象所属图层之间的碰撞。

Unity文档

您还需要确保其他对象具有:碰撞器、刚体,并且对象本身或这些组件中的任何一个都没有被禁用。


4
最终我明白了在2D碰撞检测中需要使用OnCollisionEnter2D(Collision2D col)方法。 - Erik Putz

2

1

这是我所做的:

  1. 确保你想与目标发生碰撞的对象具有非动力学刚体和网格碰撞器。我的击球器对象是一个立方体,只需将其碰撞器更改为网格碰撞器
  2. 在网格碰撞器检查器上确保启用了凸面。请参见更多网格碰撞器检查器细节此处

现在你的OnCollisionEnter可以工作了。希望这能帮到你。


0

你只需要将脚本附加到需要检测碰撞的同一对象上。


0
由于您拼写了参数的类名,导致它既没有出现错误也没有起作用。 例如:
OnCollisionEnter(Collider other) //this is wrong
OnCollisionEnter(Collision other) //this is correct

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接