首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >千人之战

千人之战
EN

Stack Overflow用户
提问于 2015-02-15 17:33:07
回答 1查看 245关注 0票数 0

在unity3d中,我如何实现200台预制板与另外200部预制板的战斗?

假设我有一个支持预制板,可以增加友方预制板的护甲,同时减少敌对预制板的护甲。在一场巨大的战争中,400个预制板(友好的和敌对的)互相接近,这将导致巨大的计算量,并且大大减少fps到2或3。

我在谷歌上搜索了一下,发现了一种有趣的叫做剔除方案的东西。但我不能理解它,也不知道如何团结一致地实施它。

下面是链接:http://forum.unity3d.com/threads/overlapsphere-with-hundreds-of-agents-and-performance.157690/

因此,1.请你向我解释一下如何使用上述链接中的剔除方案? 2.在同时拥有上百个预制材料的情况下,是否有其他方法来实施一场战斗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-15 18:03:08

这些信息似乎不可靠。然而,被描述为剔除方案实际上是一个简单的想法,但如何实现它是高度依赖于您的游戏。

其想法是根据它们的位置将单位分开,以便交互操作(攻击、防御、人工智能等)只对那些彼此足够亲近的人工作。

我可以想到两种不同的方法:

  1. 将地图划分为行和列,计算每个2x2平方内的交互作用。A,B,C在同一个广场上。还有B,C,D,但不是A,D。

  1. 使用带有触发器的对撞机,并在每个单元进入/退出对撞机时将其添加/移除到集合中。这样您就可以轻松地在每个集合中执行交互操作。

我的猜测是,如果您选择第一个选项,它将很容易实现,但由于您应该更新的平方成员比第二个选项更频繁,它有一些性能问题。

如果你选择第二个(它需要更多的研究如何使用触发器,运动学,刚体.)如果做得好,您就不会遇到性能问题。

编辑

在每个2x2平方中,这5个是处理的唯一必要交互,如果已经处理了以前的平方,则为

代码语言:javascript
复制
   (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种类型的交互作用:

代码语言:javascript
复制
(1,1) (1,2) (1,4) (1,5)
      (2,2) (2,4) (2,5)
            (4,4) (4,5)
                  (5,5)

如果我们像下面这样按顺序处理这些交互,我们可以确保没有进行两次交互。

例如:

  1. 在step1 (1,1)中可以看到。
  2. 在step2 (2,2)和(1,2)中可以看到。
  3. 在step4 (4,4)和(1,4)中可以看到。

因此,第5步剩下的是:

代码语言:javascript
复制
(1,5) (2,5) (4,5) (5,5) (2,4)

很明显,对于包含零平方的2x2平方,情况也是一样的。只是我们跳过了涉及0的交互。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28528944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档