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(); } } }
这是我做的:
- 确保您希望与目标碰撞的物体具有非运动刚体和网格对撞机。 我的击球手对象是一个立方体,只是将其对撞机更改为网格对撞机
- 在网格colider检查器上确保启用凸面。 请在此处查看更多网格对撞机检查员详细信息
现在您的OnCollisionEnter正常工作。 我希望这可以帮助你。
因为你错误地输入了参数的类名。 这没有任何错误也行不通。 例如:
OnCollisionEnter(Collider other) //this is wrong OnCollisionEnter(Collision other) //this is correct
您只需将脚本附加到同一对象,其需要检测到碰撞。