- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 CollisionHandler
类,它有 OnCollisionEnter
方法。游戏中的每个 collideable 实体都有 CollisionHandler
作为组件。因此,当 2 个对象发生碰撞时,OnCollisionEnter
方法被调用 两次 并且没关系,因为损坏和其他事情是作为对象“A”接触对象“B”的结果处理的"反之亦然。
此外,每次碰撞都会产生闪光效果并播放撞击声,当然,这些效果也会在每次碰撞时播放两次。尽管它不会被玩家察觉到,但无论如何它似乎都不正确。为了防止它,我想出了以下解决方案:我将当前帧号保存在另一个碰撞参与者中,这样它就会知道这些效果已经被第一个参与者播放过。
private void OnCollisionEnter(Collision collision)
{
// Calculate the damage caused by `this.gameObject` to `collision.gameObject`.
// ...
// Play an impact sound and show a visual effect.
if (thisObject.CollisionFrameId != Time.frameCount)
{
otherObject.CollisionFrameId = Time.frameCount;
// play sound
// show hit effect
}
}
虽然它有效,但我不确定(我是 Unity 的新手)这是最佳实践,如果是这样,请提出其他可能的解决方案。
注意我没有问"Why is OnCollisionEnter getting called twice?" .我知道为什么会这样。我的问题是关于另一个,虽然它确实提到了相同功能的名称,但它仍然没有问同样的问题。
最佳答案
您可以使用您的一个脚本(或同一个脚本)在另一个对象上执行 GetComponent 并将 RecentCollisionObject 设置为当前脚本或游戏对象(可能还有一个给定的时间范围,只是为了额外的安全性(如果只有一个触发它) ,但由于某种原因不是另一个))。
在每次碰撞时,您检查 RecentCollisionObject 是否是另一个对象(以及是否过去了不超过 ~0.01 秒)。如果为真,则您知道那个特定的碰撞一定已经被另一个对象处理过,所以重置那个对象的所有值并且什么都不做。因此,下一次发生的碰撞,无论多快,都会重新执行此循环并按预期工作。
通过这种方式,您只让第一个触发碰撞代码的人执行您的代码(如声音)。重点是两个碰撞事件都在同一帧中运行,因此无论哪个先触发,您都可以阻止第二个运行。
关于unity3d - 统一 3D : what is the correct way to detect that the collision has already been processed for another collision participant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56361065/
我正在尝试使用事务更改参与者的值。它抛出错误“错误:ID 为‘$sysregistries’的集合中 ID 为‘Participant:com.test.participant’的对象不存在” 请让我
我有一个 java 对象,类 Object 的实例 - 这就是我所知道的。现在我需要创建一个参与其创建的 Class 列表,包括它自己的类、所有父类、它的属性和方法的所有类。例如: List obj
考虑这个 ER 图 我们有被录取参加考试的学生,每个考试可以分成多个运行(例如,将大组分成多个房间或直接连续地为同一考试进行两个运行) .是否有可能(通过数据库约束)确保学生只参加属于他们被录取的考试
我有一个 RTP session 的参与者,我需要从该参与者那里获取 IP 地址。 我该怎么做? 应一位回答者的要求,我的导入: import java.io.IOException; import
我正在开发一款回合制 iOS 游戏,但遇到了一个奇怪的错误。当我实际验证我确实是当前参与者时,它说我不是当前参与者。在这里,我检查我是否是当前参与者,这会输出“相等”,但是当我尝试结束我的回合时,它会
当我们处理异步任务时,任务由多个方法调用(可能是其他类)组成,而这些方法调用又由进一步的方法调用组成。我们可以称它为一棵树。是否所有方法都必须是异步任务类型才能使原始任务真正表现出异步?答案是否适用于
所以,在这个学期我开始学习 DBMS,前两章是关于 ER 系统的。但是,即使我了解什么是弱实体以及完全参与的定义,我也发现很难区分在实践中使用什么。例如 在这个简单的例子中,我无法理解为什么餐厅不是一
本文整理了Java中org.jboss.jbossts.xts.recovery.participant.at.XTSATRecoveryManager类的一些代码示例,展示了XTSATRecover
我的数据库是这样的: Firm Agreement id Year Cusip_focal participants_cusips Abbott Lab 3947
我进行了很多搜索,并尝试了很多东西。让我们从 this question 中获取相同的场景. Bob、Alice 和 Jane 正在开会。我希望 Bob(房间的主持人)能够使 Alice 静音,这样来
我正在尝试在网页上创建 Skype 链接,该链接开始与多个参与者聊天。根据Skype URL API reference , URL 中的参与者要用分号分隔。但是,以下代码根本不起作用: Sta
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
当我尝试在 Sandbox Game Center 回合制游戏中发送回合时,偶尔会收到以下错误。 Error Domain=GKErrorDomain Code=23 "The requested o
我想知道什么时候可以安全地从集群中的机器上删除节点。 我的假设是,如果机器没有任何容器,并且它不存储任何有用的数据,那么移除机器可能是安全的。 通过https://hadoop.apache.org/
在尝试编译一个存储“参与者”的简单链表时,我遇到了一个非常奇怪的错误。然而,我显然给了它正确的数据,可以确认,因为它在不使用初始化列表时有效(执行赋值运算符“=”)。 下面是相关的代码块: struc
我制作了一款与 Swift 2 完美配合的回合制游戏。我可以成功地将代码更改为 swift 3.2 并更正所有关于 400 的错误,但是游戏中心有一个问题我不知道如何修复它。当通过 gamecente
本文整理了Java中org.jboss.jbossts.xts.recovery.participant.at.XTSATRecoveryManager.isParticipantRecoverySt
本文整理了Java中org.jboss.jbossts.xts.recovery.participant.at.XTSATRecoveryManager.setRecoveryManager()方法的
本文整理了Java中org.jboss.jbossts.xts.recovery.participant.at.XTSATRecoveryManager.isSubordinateCoordinato
本文整理了Java中org.jboss.jbossts.xts.recovery.participant.at.XTSATRecoveryManager.deleteParticipantRecove
我是一名优秀的程序员,十分优秀!