- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的场景中有一个立方体(玩家)和一个平面(地板)。两者都有 Colliders
附加到它们并且有一个 RigidBody
组件只附加到 Cube。 立方体位于平面之上。
Cube 附加了一个脚本,用于查找碰撞。
private void OnCollisionEnter(Collision collision)
{
Debug.Log("...........................Collision");
}
问题:
当 Plane 和 Cube 碰撞时,消息会打印两次。
...........................Collision
UnityEngine.Debug:Log(Object)jump:OnCollisionEnter(Collision) (at Assets/jump.cs:34)
...........................Collision
UnityEngine.Debug:Log(Object)jump:OnCollisionEnter(Collision) (at Assets/jump.cs:34)
为什么会这样?碰撞是否发生两次?
最佳答案
首先,两个日志似乎都来自 jump.cs
脚本的第 34 行,因此我们可以有把握地说问题仅来自一个脚本,而不是来自多个脚本。
Why is this happening?
以下是可能的原因:
1。您的带有 OnCollisionEnter
函数的脚本附加到多个游戏对象。那些多个游戏对象是相互碰撞的两个游戏对象。当它们发生碰撞时,将多次调用 OnCollisionEnter
。
2。带有OnCollisionEnter
函数的脚本多次附加到同一个游戏对象。
3.两个正在碰撞的游戏对象正在碰撞,退出然后再次碰撞。这是可能的,但在这种情况下不太可能,但值得一提。
您也可以通过添加 OnCollisionExit
来验证这一点:
void OnCollisionExit(Collision collisionInfo)
{
print("Collision Out: " + gameObject.name);
}
然后使用OnCollisionEnter
函数检查日志打印的顺序。
4。当前正在碰撞的每个 GameObject 上有多个碰撞器。如果您需要将多个碰撞器用作复合碰撞器,请将它们添加到一个空的子游戏对象中,然后将它们放在不同的标签中,以便您可以从脚本中忽略它们。
Is collision happening twice?
只有你能回答这个问题,因为场景就在你面前。
替换:
Debug.Log("...........................Collision");
与
Debug.Log("Collision: " + gameObject.name);
如果两个日志中游戏对象的名称相同,那么是的,它很可能发生两次。
关于c# - 为什么 OnCollisionEnter 被调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44084505/
我试图让游戏在碰撞时进入死亡场景,但不起作用。它甚至没有检测到碰撞。 我已将脚本附加到空游戏对象上,该对象具有已勾选触发器的盒式碰撞器,并且玩家确实也有刚体。 我不确定哪里出了问题,请帮忙。 usin
我的场景中有一个立方体(玩家)和一个平面(地板)。两者都有 Colliders 附加到它们并且有一个 RigidBody 组件只附加到 Cube。 立方体位于平面之上。 Cube 附加了一个脚本,用于
这个问题在这里已经有了答案: Collision callback function not called (1 个回答) 关闭 5 年前。 我想要发生的是,当你遇到一个立方体时,游戏会重置,但这是
我正在尝试构建一个游戏,您需要在其中躲避掉落的物体。我已经制造了危险,但似乎危险“克隆”的行为有所不同。 我已经制作了一个碰撞脚本,当危险撞击到它需要消失的平台时。这适用于危险对象,但不适用于掉落的危
Unity 3d 中是否有检测碰撞发生次数的方法? 比如3次则杀敌。 或者如果两次则将生命周期减少 50%。 我想用 void OnCollisionEnter 函数来做到这一点.. 这是我的 AI
我是 c# 和 Unity 的新手,我有一个问题。我无法理解 OnCollisionEnter 的基本工作原理。 比如,如果我有一个地形和一个悬停在它上面的球体,它有刚体组件,我写:- void On
我的游戏对象附加了 Rigidbody2D 和 2D 碰撞体。有没有办法检查我的任何两个对象之间是否发生碰撞?我找到了一种方法:方法 OnCollisionEnter(),但我想在特定时间检查特定对象
我正在尝试制作一款平台游戏,我想在 x 秒后禁用平台重力。但是它给出了一个编译错误,它不能被使用,因为 void 不是内部接口(interface)类型。 private void OnCollisi
我检查了几乎所有的答案,但这些大多是简单的错误和失误。我的问题是即使与其他刚体发生碰撞也不会调用 OnCollisionEnter。 这里是没有被调用的部分: void OnCollisionEnt
我有一个带有网格碰撞器的对象和一个带有球体碰撞器的预制件。如果两者发生碰撞,我希望预制件的实例被销毁。 我在脚本中写了以下内容: private void OnCollisionEnter(Colli
嗨,我使用 Unity 一段时间了,但我仍然无法区分 OnCollisionStay 和 OnCollisionEnter 之间的区别。我假设当刚体(如球)与另一个刚体/碰撞体(如墙壁)接触时调用 O
我有一个角色,它有一个 bool 标志,决定他是否正在跳跃(如果他正在跳跃,他就不能再跳跃)。当他跳跃时,跳跃标志设置为 true,当他与某物碰撞时,跳跃标志设置回 false(这样他就可以再次跳跃)
我有一个 void OnCollisionEnter(Collision other) 和 void OnMouseUp(),但我希望它是这样的,如果我松开鼠标,那么碰撞应该是检查。所以我想要另一个函
我试图让我的玩家在场景中点亮火把,但不太确定如何做到这一点。 我有一个带有粒子系统的手电筒预制件。每次玩家的 torch 与未点燃的 torch 相撞时,我都希望该 torch 开始燃烧。 我一直在努
我正在尝试使用跳跃 Action 与其他几个游戏对象进行交互。在非常简单的层面上,我有一个需要与之交互的多维数据集。为此,我写了一个脚本 - using UnityEngine; using Syst
我是一名优秀的程序员,十分优秀!