在unity3d中,我如何实施200个预制件与另外200个预制件的战斗?
假设我有一个支持预制件,可以增加友方预制件的装甲,同时减少敌对预制件的装甲。在400个预制件(友好和敌对)彼此靠近的巨大战斗中,它将导致大量计算,并将fps大幅降低至2或3。
我用Google搜索并发现了一些有趣的剔除方案。但我无法理解它或弄清楚如何统一实施它。
以下是链接:http://forum.unity3d.com/threads/overlapsphere-with-hundreds-of-agents-and-performance.157690/
所以, 你能否告诉我如何在上面的链接中使用剔除方案? 2.在实施同时有数百个预制件的战斗中还有其他方法吗?
答案 0 :(得分:1)
这些信息似乎并不可靠。然而,被描述为剔除方案实际上是一个简单的想法,但如何实现它高度依赖于您的游戏。
这个想法是根据单位的位置分开单位,这样交互操作(攻击,防御,人工智能......等)只对那些彼此足够接近的人有效。
我能想到两种不同的方法:
我的猜测是,如果您选择第一个选项,它将很容易实现,但由于您应该比第二个选项更频繁地更新方形成员,因此存在一些性能问题。
如果您选择第二个(它需要更多关于如何使用触发器,运动学,刚体...的研究)并且做得对,您将不太可能遇到性能问题。
在每个2x2平方中,这5个是唯一需要处理的交互 IF 以前的方块已经处理过了:
(first 1x1 square, last 1x1 square)
(second 1x1 square, last 1x1 square)
(third 1x1 square, last 1x1 square)
(within last 1x1 square)
(second 1x1 square, third 1x1 square)
假设我们有一个区域分为3行和3列。我们添加了一个额外的行和列来简化计算(零方块在边界外,因此不会有单位)
现在每个2x2平方(例如1,2,4,5)有10种类型的相互作用:
(1,1) (1,2) (1,4) (1,5)
(2,2) (2,4) (2,5)
(4,4) (4,5)
(5,5)
如果我们按如下顺序处理这些交互,我们可以确保不会进行两次交互。
e.g。
那么第5步剩下的是:
(1,5) (2,5) (4,5) (5,5) (2,4)
显然,对于包含零平方的2x2正方形,它是相同的。只是我们跳过涉及0的交互。