嗨,我使用 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;
}
最佳答案
这真的很简单。假设碰撞开始,碰撞体保持相交一段时间(几帧),一段时间后它们再次分离。那么事件是:
- OnCollisionEnter 仅适用于第一帧,在 OnCollisionExit 之前不会再出现
- OnCollisionStay 持续整个持续时间(所有帧)
- OnCollisionExit 仅适用于最后一帧
Even if its called once per frame, If I for example jump up in the air and hit a ceiling above me, is it still called?
当然是这样。但接下来就是新的碰撞。但是,如果中间有一段时间您没有与任何物体发生碰撞,则在此期间您将不会收到 OnCollisionStay 事件。
为了更深入地了解这些事件,最好创建一个简单的演示场景,在其中手动使两个碰撞器相交,并将一些文本写入控制台以表示各种事件。
关于unity-game-engine - OnCollisionStay 与 OnCollisionEnter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23681719/