如何清除玩家创建的过多碎石?


92

在我制作的最新游戏中,您可以任意切片2D对象,如以下gif所示:

在此处输入图片说明

您可以将其连续切成数百或数千个碎片。这不会造成很大的延迟,因为它们始终处于休眠的物理状态,但是当您使它们移动时会出现问题。

我不太确定如何处理它,因此切碎不会有太多碎石。我真的不想在一段时间后删除它们;我不喜欢这样,如果您过了一会儿又将其切碎,它会随机消失。

如何清除玩家创建的过多碎石?


17
从您的问题中并不清楚您实际上想要什么。您说要“清理瓦砾”,但同时又说您不希望瓦砾在一段时间后消失。
菲利普

10
Tiny&Big会摧毁较小的碎片。可以肯定的是,较大的部分会停留在该水平附近,但是我不完全记得。这是一个示例:youtu.be/236ly0ApPqg?
t=177

2
超出范围的东西可以移回并更换。
罗伦·佩希特尔

3
只是我的一点意见,但是设置了一个最小的对象大小,该大小将受剪切动作的影响。如果很难单选要切割的工件,则无法切割。(
顺便说一句

12
我想说明一下,我不认为自己是一名切割技师,因为这是我在github上发现一种免费资产。在使用该示例时,它为您提供了有关如何使用它切割对象的想法。(玩家是由我编码的,所以游戏中的其他所有东西也会被编码
。– Ducktor

Answers:


71

首先,该游戏机制看起来可能非常有趣,因此恭喜您考虑!这里有两个简单的解决方案,可以单独使用或一起使用来解决此特定问题:

去除很小的碎片

保持真正不会阻碍玩家或对环境产生任何实际影响的微小碰撞并没有多大意义。计算额外的冲突逻辑根本不值得,因此请删除这些碎片或删除它们之间的碰撞。

限制玩家晋级

如果您可以将每个障碍物切成一堆糊糊,那么无限制的切割可能会使您的难题变得非常简单。给玩家一些削减的玩法(或使其随时间慢慢充电),除了消除处理一千个碎片的麻烦之外,您可能会发现它使您的难题更具挑战性。


1
想想我会做第一个,因为我不打算制作任何类型的益智游戏。
Ducktor

36
当小碎片也消失时,Micheal湾将其抬起。那不是日志,是木屑。或爆炸的木屑。为什么不?!
corsiKa

26
@corsiKa如果在切割动作中添加一些火焰效果,则可以使切口在触点上留下一定宽度的焦化痕迹。如果物体太小以至于被完全“烧焦”,它可能会在火焰中爆炸并在短时间内燃烧掉。
T. Sar

155

找出瓶颈

几百个移动物体应该不是问题。但是,可能有数百个碰撞对象。这将需要一些测试,但是我相信您遇到的瓶颈是碰撞。

顺便说一句,我们在谈论多少个对象?什么平台?手机游戏的一百个对象与网页游戏的一百个对象或桌面游戏的一百个对象不同。

测试相同的游戏,但禁用剪切对象之间的碰撞,看看是否让它滞后于相似数量的对象。如果是这种情况,则意味着大量的物体是造成麻烦的原因。否则,冲突就是问题所在。

这将决定您将如何提高性能的决定。并非以下所有想法都适用,无论如何您都需要进行测试。


我不会谈论针对远离播放器的大量对象进行优化的问题,因为与这些对象进行交互时似乎会遇到麻烦。

使它们移动时会出现问题。

如果在与对象进行交互时发生问题,则尚不清楚如何删除不可见的对象将解决该问题……但是,我认为这可能会有所帮助。

我只是说,如果远离玩家的物体出了问题,您可以先从较小的关卡开始,或者考虑将游戏划分为多个小块,然后根据玩家所处的位置进行加载和卸载。


越界

我相信,在清理瓦砾时,首先要做的是去除超出范围的物体。例如,一块掉到一个坑里。如果没有办法让玩家能够到达那里看到它,那么就没有理由保持它。

我将回到这一点。


使它更真实(第1部分)

当您使用锯,斧头或类似工具切割木材时,会丢失材料(锯末,刨花等)。即使用激光切割,激光也会燃烧一些木材。另外,对于不是木头的东西,通常会在切口周围产生变形,碎裂等。

我的意思是削减并不完美,并且会损失一些材料。您可以在游戏中对其进行建模。那个切开红色东西的魔力有厚度。从物体上去除该厚度(如果感到内gui,请添加粒子效果)。

这意味着您将无法切割任何小于该厚度的东西,实际上,尝试将其从游戏中删除。那很好!这意味着存在的瓦砾数量是一个上限,并且在游戏中有机械上健全的方法可以清除它。


换小物件的齿轮

如果冲突是问题,这样做会更好。

一旦物体太小,它所具有的不同角度的细节就不再那么重要了。您可能会更改为不太准确的碰撞机制。例如,您可以使用圆形对撞机。

您甚至可以对待较小的对象而不会相互碰撞;仅考虑它们与代理对象(例如玩家的头像或AI控制的角色)之间的碰撞。

最后,很小的物体可能会变成灰尘(颗粒效应)。


使它更真实(第2部分)

如果冲突是问题,这样做会更好。

材料在压力下变形和破裂。如果最终得到的物体厚度很小,请将它们分解成较小的物体,以便它们可以利用上述解决方案。

我们可以假装它的厚度太小,当您击打它时会崩溃和破裂。


合并物件

如果存在问题,则这将更好地工作。

许多游戏用来处理可能会影响性能的大量掉落的常见技巧是将掉落捆绑在一起。

您可以为彼此附近的小物体尝试类似的操作。让它们成为单个对象。但是,我并不是要把各个部分粘在一起。我的意思是创建一个对象来处理他们的物理问题。您仍然可以使用类似于粒子效果的技术来表示组成对象的各个片段。


使它更真实(第3部分)

你听说过风吗?现实世界中有风。

用风将小物体推开。

我知道它听起来很直观,因为这意味着小物体不能静止,至少不能立即静止。在做出判断之前,请先阅读以下内容。

您可以在小物体开始堆积之前或尽快使用 将它们推开。如果您对小对象使用优化(例如将它们组合或消除它们之间的冲突),则效果更好。

此外,如果您可以用风将物品推入坑中或超出范围,则可以作为借口将物品移开。我告诉过你我要回到那个话题。即使您不这样做,它也可以作为删除离玩家太远的小物体的借口,只是假装在玩家不在的时候风将它们驱散了。

您可以在播放器不注视时删除一些对象,这是我的祝福。

除此之外,您现在有借口添加风,您可以添加风作为其他机制或游戏障碍的一部分。如果您愿意,甚至可以在叙事中加入风的精神,以保持事物的清洁。

注意:当需要清洁碎石时(虽然可以使用),不必一定要触发风,但可能会随机产生风。


海狸!

一些烦人的海狸来了,偷了你的木头!

现在您有一个敌人类型!

另外,当然,它们会在您不看时清除木头。您甚至可以对其进行设计,以便再次看到一个海狸在一块曾经是一堆的木头旁边逃跑。这将为您留下难忘的瞬间,将解释为什么木头消失了,并立即解决您面临的一些性能问题。


都是权衡

选择的平台或工具存在限制,即使您开发游戏所需的时间和预算也有限制。你不能让现实的完美模拟,没有人可以

每个开发人员都在目标平台和当时所施加的工具的限制范围内工作,最好的游戏必须权衡取舍,以使游戏变得有趣且引人入胜……即使这意味着现实主义程度较低,很多时候他们很有趣,因为他们不切实际。

让创造力摆脱这些限制。

虽然,您还可以通过选择对您的开发方便的现实部分,使游戏更加逼真。考虑到有时移除远离玩家的物体是制作有趣游戏的一部分成本。


36
这篇文章是瓦砾溢流问题的明确答案。您已对技术进行了详尽的总结,同时清楚地展示了创新和选择适合您情况的解决方案的必要性,同时还展示了技巧和叙事如何融合在一起。我只是想说我很难表达自己的印象。
Dragomok

12
尝试切割一个小于光束宽度的物体不一定会使该物体完全消失,而可以产生一个较小的物体。重要的是,仅当切割的对象超过光束宽度时,才可以增加对象的数量。
超级猫

1

世界是离散的。您不能渲染小于像素的对象,因此请勿存在此类对象。(这类似于Theraot提出的一些现实主义观点。)

的确,您可能会免费获得:播放器将其剪切线指定为屏幕上的离散线。剪切的效果是将每个对象划分为分别由该行上或该行以下的像素以及严格位于其上方的像素组成的子对象。一个像素像素的对象不可能同时位于线条的上方和下方,因此无法通过此算法进行剪切。

如果将所有可切割表切割成单个像素仍会留下太多无法跟踪的对象,则较大的最小尺寸可能仍然有效。

或者只是不用担心。如果玩家准备花很长时间将物体切成灰尘,显然他们并不着急,因此他们可以处理造成的滞后。;-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.