【问题标题】:How to make objects in Unity2D interract smoothly?如何使 Unity 2D 中的对象平滑交互?
【发布时间】:2019-11-29 21:41:59
【问题描述】:

您好,我正在使用 Unity2D 用 c# 制作 2D 游戏。

游戏基本上是塔式堆叠游戏,玩家从数组中获得随机对象,他们需要将这些对象堆叠在一起。物体在屏幕顶部生成,带有身体类型运动学,玩家只能在 x 轴上移动它,当玩家放开物体时,它的身体类型变为动态,它开始下落并降落在起始平台或塔上。

我的问题是,当这个新物体降落在现有的塔或启动平台上时,它不会顺利降落,它会进入另一个物体,有时会反弹,并且经常翻过塔。 当这些物体相互重叠时,它们会振动并导致塔翻倒。

有没有什么办法可以让物体落地时稳定不相互进入?

提前致谢。

【问题讨论】:

  • 物理对象自动进行碰撞检测 IIRC。

标签: c# visual-studio unity3d


【解决方案1】:

您所描述的是所有物理引擎的众所周知的问题和限制。

这被称为堆叠稳定性,如果你有足够多的物理对象,它总是会成为一个问题。

实际上并没有一个简单的解决方案,它结合了选择正确的物理引擎、正确设置对象的属性,甚至放入一些您自己的自定义代码以尽可能规避一些问题(例如,通过禁用堆栈中太深的元素的物理特性,因此我们认为它们“稳定”,直到情况发生变化。

I recommend reading (and watching) this, and from there, exploring wherever the links will take you.

正如我所说,请记住,这是......一个常见的问题,有时很难解决。在一些复杂的情况下(你的情况不应该是其中之一),甚至无法解决。

(在答案被接受两天后编辑,我应该马上写这个,对不起):

哦,我忘了(抱歉,但希望您已经从您阅读的一些资源中发现)物体相互碰撞的问题也可能受到某些设置的影响(最大穿透深度 i认为它是统一的)。另一件可能有帮助的事情是完全自定义代码,它将从向下坠落的对象进行光线投射,并且当它检测到某个距离处的块时(您可能需要检查对象可以在 1 到10 帧左右),它会暂时禁用下落的物理,将其准确定位在下方块的顶部,将速度归零,然后重新启用其上的物理。这将避免穿透问题,以及新块撞击塔时发生的不稳定性和振动。但是,如果您希望以某种方式出现这种影响不稳定性的影响,您仍然可以手动在受影响的块上添加物理力,并且您可以设置它的大小。强迫自己(而不是从块中计算出来),这意味着你可以更好地控制影响效果的重要性,这对于游戏平衡非常有用,因为这种效果对于游戏的难度非常重要,一般来说,你会希望对影响游戏难度的事情有这种程度的控制;)

【讨论】:

  • 谢谢,真的很有帮助。我改变了质量并添加了具有更多抓地力的定制材料,现在似乎很好。在未来,我仍然在考虑用脚本做更多的事情。
  • (我在答案中添加了一点,我应该马上写在那里,抱歉)@DāvidsVolohs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多