我几乎检查了每个答案,但这些都是简单的错误和错误。 我的问题是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
}
}
}
}
甚至没有“碰撞!!!”消息出现。我是否理解错误的用法,或者我忘记了什么?
答案 0 :(得分:39)
您使用的是2D碰撞器和刚体吗?如果是这样,请使用此功能而不是 OnCollisionEnter
void OnCollisionEnter2D(Collision2D coll)
{
Debug.Log(coll.gameObject.tag);
}
答案 1 :(得分:1)
您需要确保碰撞矩阵(编辑 - >项目设置 - >物理)不排除对象所属的图层之间的碰撞。
您还需要确保另一个对象具有: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)
以下是我的工作:
现在你的OnCollisionEnter正常工作。我希望这会对你有所帮助。
答案 4 :(得分:0)
因为您错误地输入了参数的类名。这使得没有错误也行不通。 例如:
OnCollisionEnter(Collider other) //this is wrong
OnCollisionEnter(Collision other) //this is correct
答案 5 :(得分:0)
您只需要将脚本附加到同一个对象,该对象的需要会检测到碰撞。