首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OnCollisionStay Vs OnCollisionEnter

OnCollisionStay Vs OnCollisionEnter
EN

Stack Overflow用户
提问于 2014-05-15 22:49:07
回答 3查看 18.4K关注 0票数 2

您好,我使用Unity已经有一段时间了,我仍然无法分辨OnCollisionStay和OnCollisionEnter之间的区别。我假设当一个刚体(如球)与另一个刚体/碰撞器(如墙)接触时,就会调用OncollisionEnter。但是当我看到OnCollisionStay的例子时,我完全搞混了。即使它每帧调用一次,例如,如果我跳到空中,撞到我上方的天花板,它仍然被调用吗?到底有什么不同呢?以下是Unity文档所说的内容和我使用的代码。

“当此碰撞器/刚体已开始接触另一个刚体/碰撞器时,将调用OnCollisionEnter。”

“对于接触刚体/碰撞器的每个碰撞器/刚体,每帧调用一次OnCollisionStay。”

代码语言:javascript
运行
复制
if(Input.GetKeyDown(KeyCode.W) && OnGround == True)
{
    rigidbody.velocity.y = jumpHeight;
}

onGround = false;

function OnCollisionStay()
{
    onGround = true;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-15 23:19:48

这真的很简单。让我们假设碰撞开始,碰撞器保持相交一段时间(几帧),并在一段时间后,他们再次分离。这些事件包括:

仅对第一帧执行

  • OnCollisionEnter,并且在整个持续时间内在OnCollisionExit
  • OnCollisionStay之前不再重复(最后一帧的所有frames)
  • OnCollisionExit仅限

即使它每帧调用一次,例如,如果我跳到空中,撞到我上方的天花板,它还会被调用吗?

当然是了。但是对于那次新的碰撞。但是,如果在这两者之间有一段时间你没有与任何东西发生冲突,那么在这段时间内你将不会得到OnCollisionStay事件。

为了更深入地理解这些事件,最好创建一个简单的演示场景,在其中手动将两个对撞机相交,并将各种事件的一些文本写入控制台。

票数 6
EN

Stack Overflow用户

发布于 2014-05-15 23:23:33

Bart的答案是正确的,所以这个答案更多地是如何使用这两个的一个例子。

比方说,假设一个球打在墙上,OnCollisionEnter会在每个碰撞案例中发射1次,而OnCollisionEnter可能会对墙造成一些破坏,或者摧毁墙。(就像突破一样)

代码语言:javascript
运行
复制
//Ball
#pragma strict

function OnCollisionEnter (col : Collision)
{
    if(col.gameObject.name == "Wall")
    {
        Destroy(col.gameObject);
    }
}

然而,在OnCollisionStay中,只要OnCollisionStay在给定的时间后继续发射,你就可以使用它,只要你有一个角色的生命点步入毒云,并移除连续的生命点或增量计时生命点。(我在想castlevania )

代码语言:javascript
运行
复制
//PoisonGasCloud
#pragma strict
function OnCollisionStay(collisionInfo : Collision)
{

    collisionTime = Time.deltaTime;

    if ( collisionTime > 5)
    {
        hero.hp-=10;
    }
}

注意:我通常用C#编写代码,所以我的UnityScript可能有点偏。

票数 1
EN

Stack Overflow用户

发布于 2020-10-22 04:49:08

  • When collision start: OnCollisionEnter & OnCollisionStay
  • When collision continue: OnCollisionStay
  • When collision end: OnCollisionExit

注1:不会同时调用OnCollisionStay和OnCollisionExit。

注2:在OnCollisionStay之前调用OnCollisionEnter。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23681719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档