OnCollisionEnter不是统一调用的

时间:2013-12-13 13:27:02

标签: c# unity3d

我几乎检查了每个答案,但这些都是简单的错误和错误。 我的问题是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
                }
            }
        }
    }

甚至没有“碰撞!!!”消息出现。我是否理解错误的用法,或者我忘记了什么?

6 个答案:

答案 0 :(得分:39)

您使用的是2D碰撞器和刚体吗?如果是这样,请使用此功能而不是 OnCollisionEnter

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

    }

答案 1 :(得分:1)

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

Unity Docs

您还需要确保另一个对象具有:collider,rigidbody以及对象本身或其中任何一个组件都未被禁用。

答案 2 :(得分:1)

试试这个

http://docs.unity3d.com/Documentation/ScriptReference/Collider.OnCollisionEnter.html

using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {
  void OnCollisionEnter(Collision collision) {

    foreach (ContactPoint contact in collision.contacts) {
        Debug.DrawRay(contact.point, contact.normal, Color.white);
    }

    if (collision.relativeVelocity.magnitude > 2){
        audio.Play();        
    }

  }
}

答案 3 :(得分:1)

以下是我的工作:

  1. 确保您希望与目标碰撞的物体具有非运动刚体和网格对撞机。我的击球手对象是一个立方体,只是将其对手改为网格对撞机
  2. 在网格物体检查器上确保启用凸面。请参阅更多网格对撞机检查员详细信息here
  3. 现在你的OnCollisionEnter正常工作。我希望这会对你有所帮助。

答案 4 :(得分:0)

因为您错误地输入了参数的类名。这使得没有错误也行不通。 例如:

OnCollisionEnter(Collider other) //this is wrong
OnCollisionEnter(Collision other) //this is correct

答案 5 :(得分:0)

您只需要将脚本附加到同一个对象,该对象的需要会检测到碰撞。