OnCollisionStay与OnCollisionEnter

fox*_*ler 2 unity-game-engine

嗨,我已经使用Unity一段时间了,对于我的生活,我仍然无法区分OnCollisionStay和OnCollisionEnter.我假设当刚体(如球)与另一个刚体/对撞机(如墙)接触时,会调用OncollisionEnter.但是当我看一下OnCollisionStay的例子时,我完全感到困惑.即使它每帧调用一次,如果我跳到空中并撞到我上方的天花板,它仍然被称为?究竟有什么区别?以下是Unity文档所说的内容以及我使用的代码.

"当此对撞机/刚体开始接触另一个刚体/对撞机时,会调用OnCollisionEnter."

"对于每个碰到刚体/对撞机的碰撞器/刚体,每帧都会调用一次OnCollisionStay."

if(Input.GetKeyDown(KeyCode.W) && OnGround == True)
{
    rigidbody.velocity.y = jumpHeight;
}

onGround = false;

function OnCollisionStay()
{
    onGround = true;
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*art 5

这真的很简单.让我们假设碰撞开始,碰撞器保持相交一段时间(几帧),并在一段时间后再次分开.那么事件是:

  • OnCollisionEnter仅用于第一帧,并且在OnCollisionExit之后再也不会出现
  • OnCollisionStay整个持续时间(所有帧)
  • OnCollisionExit仅适用于最后一帧

即使它每帧调用一次,如果我跳到空中并撞到我上方的天花板,它仍然被称为?

当然是啦.但是那次新的碰撞.但是如果有一段时间你没有碰到任何东西,那么你将不会在这段时间内获得OnCollisionStay事件.

为了更深入地了解这些事件,最好创建一个简单的演示场景,在该场景中手动交叉两个碰撞器,并将一些文本写入控制台以用于各种事件.