为什么没有调用OnCollisionExit
?我同时使用OnCollisionEnter
和OnCollisionExit
,但是很不幸,只有OnCollisionEnter
被调用。
public bool HandleCollided = false;
public void OnCollisionEnter(Collision col)
{
if(col.gameObject.name == "RightHandAnchor")
{
HandleCollided = true;
}
}
public void OnCollisionExit(Collision col)
{
if(col.gameObject.name == "RightHandAnchor")
{
HandleCollided = false;
}
}
答案 0 :(得分:3)
基于给定的代码片段,无法判断为什么代码无法正常工作-该代码取决于编辑器中每个GameObjects'
检查器窗口的配置。
此脚本所附加的GameObject
和冲突的GameObject
都必须具有一个Collider
组件(例如,一个BoxCollider
组件或SphereCollider
组件)。两个Colliders
都必须禁用其isTrigger
复选框。该脚本附加到的GameObject
还必须附加一个Rigidbody
组件。
为了调试这种情况,请在函数中添加Debug.Log()
语句。通常,这是一种好习惯,可能是正在调用该函数,但条件语句不正确。
关于可能出了什么问题,还有一些其他想法:
GameObject
的名称。GameObject
。HandleCollided
也未在代码中的其他地方被更改。col
参数不是您所期望的。public void OnCollisionEnter(Collision col)
{
Debug.Log("Collision Enter!");
Debug.Log(col.gameObject.name);
}
public void OnCollisionExit(Collision col)
{
Debug.Log("Collision Exit!");
Debug.Log(col.gameObject.name);
}
答案 1 :(得分:1)
因此,您说:“有两个物体相互碰撞。一个物体附着有球体碰撞器,另一个具有盒子碰撞器。其中一个物体也具有刚体。”代码在哪一个上?是的,这很重要!只有一个对象会跟踪出口,这意味着如果不是运动学对象,将无法正常工作。
答案 2 :(得分:1)
不幸的是,使用OnCollisionExit无效,因此我改用了OnTriggerEnter和OnTriggerExit。我为两个对象都激活了“ isTrigger”。
fk_KOMANDAid_KOMANDA
答案 3 :(得分:0)
您需要将非运动刚体附加到对象上才能获取OnCollisionExit事件
答案 4 :(得分:0)
尝试使用OnCollisionEnter()
和OnTriggerExit()
!
示例:
void OnCollisionEnter(Collision collision)
{
if((collision.gameObject.GetComponent<AttributeManager>().attributes & doorType) != 0)
{
this.GetComponent<BoxCollider>().isTrigger = true;
}
}
private void OnTriggerExit(Collider other)
{
this.GetComponent<BoxCollider>().isTrigger = false;
}