OnCollisionEnter不起作用

时间:2018-08-07 02:25:48

标签: unity3d

我正在做统一游戏中的蹲伏脚本。我遇到的一个问题是,当您蹲伏并处于某物之下时,您仍会上升并被卡住。解决方案是创建一个球员的孩子,检查球员头顶上方是否有东西

代码将像这样工作

void OnCollisionEnter(Collision collision)
{
    isunder = true;
     print("collide")
}
void OnCollisionExit(Collision collision)
{
    isunder = false
}

由于某种原因,我无法使其正常工作。一切都有对撞机,一切都有刚体,一切都是运动学的,而不是运动学的。我只是

1 个答案:

答案 0 :(得分:2)

所以我不太确定您是如何尝试设置场景的,但实际上无法使用Collision检查物体是否在您的头顶上方,就像您使用的是带有刚体的空gameObject一样,不会检测到任何东西,如果在上面放了一个对撞机,您现在将有一个看不见的物体碰到东西。所以我建议您使用光线投射或触发器

要使用触发器,请将对撞机放在gameObject上,并将isTrigger设置为true。然后在您的代码中可以使用以下代码:

void OnTriggerExit(Collider collision)
{

    Debug.Log("Exit");
}
void OnTriggerEnter(Collider collision)
{
    Debug.Log("Enter");
}

就像碰撞一样工作,除了它是一个不会导致任何实际碰撞的不可见字段。

也可以使用另一种方式,射线广播。

public Transform rayStart;
float length; //Set equal to how far above head you want to check
public bool underObject() {
    return Physics.Raycast(rayStart.position, Vector3.up, length);
}

只要确保是rayStart的gameObject(可能位于角色头部的顶部)不在角色内部,否则ray会击中您的角色并始终返回true。长度可能是从蹲伏到站立的距离之差。