OnCollisionEnter不是统一调用的

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

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

你在使用2D对撞机和刚体吗? 如果是这样,请使用此函数而不是OnCollisionEnter

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

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

Unity Docs

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

试试这个

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

这是我做的:

  1. 确保您希望与目标碰撞的物体具有非运动刚体和网格对撞机。 我的击球手对象是一个立方体,只是将其对撞机更改为网格对撞机
  2. 在网格colider检查器上确保启用凸面。 请在此处查看更多网格对撞机检查员详细信息

现在您的OnCollisionEnter正常工作。 我希望这可以帮助你。

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

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

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