【问题标题】:Getting fine detail in colliders?在对撞机中获得精细的细节?
【发布时间】:2016-03-23 16:40:12
【问题描述】:

我正在开发一个 2D 物理游戏,该游戏涉及目前使用复杂多边形碰撞器的对象之间的碰撞。

当物体发生碰撞时,我使用 otherObject.contacts[0].normal 获得接触点的法线,并使用 Rigidbody2D.AddForceAtPosition 以相等但相反的方向将物体敲开,力乘以法线由一个常数。

大多数情况下,这可以完美运行,但我发现当与多边形碰撞器中的凹形部分(又名:向内“倾角”)发生碰撞时,法线将被翻转,而对象将改为被推向对方。

或者,我还有其他方法可以解决这个问题吗?

蓝色圆圈区域是有问题的凹面部分的示例

【问题讨论】:

  • 只是出于好奇...... “使用 Rigidbody2D.AddForceAtPosition 将物体敲开......” 你为什么要这样做? PhysX 会完全自动为您完成这项工作,对吗??
  • 我理解这种困惑。澄清一下:当物体碰撞时,它们应该被向后吹(想象一下在接触点发生爆炸)
  • 嗯,PhysX 会为你做这件事,只需更改 PhysicMaterial 对吗?
  • 是的,但我希望击退力保持一致,并且不依赖于碰撞速度。
  • 公平,那么 (A) 我不知道为什么你正在做的事情不起作用..你很确定也许 它正在工作 但它实际上反弹的部分与您想象的不同,或者某些类似的部分,并且(B)您确实可以使用“小型对撞机”轻松地做到这一点 - 或者更确切地说,如果您必须使用多边形对撞机,然后定制就是这样,你知道,“不那么详细”(但仍然尽可能详细)

标签: unity3d


【解决方案1】:

或者,我还有其他方法可以解决这个问题吗?

是的,视频游戏中的标准是大多数东西都有许多小型简单对撞机,而不是一个大型复杂对撞机。

这是游戏工程的基础知识。

(对于业余爱好者和该领域的新手来说,这可能会非常令人惊讶。)

所以,想象一下任何普通 3D 游戏中的汽车。你会有一个用于后保险杠的对撞机,一个用于前保险杠,一个用于“左门”等等。非常典型的是,每个人都必须以不同的方式做出反应,并且您需要知道触摸了哪个区域。

如果 2D 多边形有 12 条边,则只需制作 12 个“小”,因为它是每个边的碰撞器。

由于没有屏幕截图,我们对您的设置一无所知,但这可能有效。

但请注意,Unity 的 2D 多边形碰撞器实际上已经知道将对象切成更小的三角形形状,如果它是凹形的 - 我很惊讶它对你有用。 p>


进一步:现在我们可以看到您的图像了。

在地球上的任何电子游戏中,戴头盔的方式是使用橙色的方形对撞机:

如果(出于某种原因......为什么?出于什么目的?如何?在哪里?可能有什么原因?)你正在制作有史以来最精确的视频游戏,由人类创造,在一个全新的平面上工程方面的,对于一些具有量子扭曲空间核心的虚构新硬件,......在这种情况下......你可能会添加两个额外的对撞机来覆盖喇叭。但没有人会注意到其中的区别。

我很欣赏你可能正在做一些非常不寻常的事情,比如“近距离游戏”(“你是中世纪斯堪的纳维亚半岛的一个原子,从头盔上弹起”或其他什么),在这种情况下会有一些其他的解决方案。

非常简短的回答是,您偶然发现了有关游戏技术的最令人惊讶的事情之一……我们使用蹩脚、简单的对撞机,您在玩的每个游戏中都被欺骗了一辈子!

【讨论】:

  • 使用多个较小的碰撞器会影响性能吗?此外,我还在问题中添加了示例对象的屏幕截图。
  • 呵呵 :) 组装的角色非常小(在最大相机放大时约为屏幕空间的 1/40),所以我认为像素完美的碰撞非常过分。我将继续并切换到盒子对撞机。这是我的第一个基于物理的游戏,所以我只是边玩边学。无论如何,非常感谢您的帮助和建议:)
  • 你明白了!请享用。是的,这正是游戏的制作方式。 “汽车”的例子是一个很好的例子。欢呼
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
相关资源
最近更新 更多