我正在使用由数千个网格正方形组成的图块地图创建游戏。目前,每个广场上都有一个广场对撞机,用于检查碰撞。
但是,对于成千上万个微小的块,检查它们是否全部碰撞是低效率的。如果我事先知道tilemap看起来像这样,那么我可能只使用了3或4个大型对撞机,而不是数千个小型对撞机:
是否存在某种标准算法,可将许多小相邻的小块合并为最大的小块?如果是这样,有人可以在这里描述它,还是指向有关这种算法的文献?
另外,也许以这种方式预处理瓦片碰撞器完全是错误的方法。如果是这样,应对大量对撞机效率的正确方法是什么?
您是否打算使地形可破坏?
—
jgallant 2015年
@乔恩 我没有考虑过。我想象允许破坏性将使问题变得更加棘手(因为其中一个小型对撞机可能会被摧毁,这意味着大型组合对撞机需要重新计算,对吗?)
—
Craig Innes
是。这就是为什么我问。通常,您会将所有地形合并成一个网格。如果计划允许地形可破坏,则可以使用另一种方法,该方法仅在外部块上设置碰撞器。您将预先计算什么块是“边缘块”,然后为这些块分配可合并的对撞机。(jgallant.com/images/uranus/chunk.png- 图像陈旧且不完美,但演示了该技术)您正在使用什么作为游戏引擎/平台?
—
jgallant 2015年
@Jon我正在使用Unity作为我的游戏引擎,并使用BoxCollider2D组件来处理贴砖碰撞。我没有提到我的特定平台,因为我认为它可能对游戏开发者堆栈交换更有用,以获得对该问题的更一般的答案。关于您的“边缘块”方法,您能否提交一个包含该方法算法精确信息的答案?还是您有关于此类技术资源的链接?
—
Craig Innes
我确实为此有一个Unity实现,因为它并不是真正的枯燥乏味,所以需要花一些时间来编写。我目前在工作,源代码在家里。如果您可以等到今晚才能得到答案。看起来是这样的: jgallant.com/images/landgen.gif
—
jgallant 2015年