unity-game-engine - OnCollisionStay 与 OnCollisionEnter

标签 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;
}

最佳答案

这真的很简单。假设碰撞开始,碰撞体保持相交一段时间(几帧),一段时间后它们再次分离。那么事件是:

  • 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/

相关文章:

c# - Unity 中初始跳转后 "isGrounded"变量不会更改为 false

c# - 将类数据保存为文本文件

unity-game-engine - Unity抛出: Request error (error): UnityEditor. AsyncHTTPClient :Done(State, Int32)错误

c# - 防止使用 new() 构造对象

unity-game-engine - 如何检查unity3d动画师状态是否完成

c# - Unity3D - 检测移动平台上的碰撞

c# - Unity 2D 中的运动卡顿

animation - blender 中的汽车装备并导入到 Unity

android - 找不到要复制的文件 libil2cpp.dbg.so - :unityLibrary:BuildIl2CppTask

c# - 使用 NavMesh 寻找距离较近的玩家