跟踪并行级别的VoxelData / NPC

背景

我打算用Unity3d制作一个体素世界(Finit Size)的第一人称射击游戏。

玩家有某种基地,他必须防止敌人的单位。 还有一个或多个敌方基地,玩家必须销毁,但在不同的水平/地图。

游戏有多个级别,通过预定义的端口连接。 所以玩家和其他单位可以从一级到另一级。 有几个级别的探索。 (也许将来可能会有infinit级别。)

在游戏开始时,我创建一个LevelManager和所有关卡作为他们的孩子。 他们可以独立管理单元和体素块。 一个ChunkManager总是渲染玩家所在的当前Level。他创建了多个Chunks,它自己从Level的当前Voxel-Data中生成Mesh。 这一切都很好,我也能够在各级之间旅行。 (这一切都在一个场景中运行。)

目前我试图实施某种蠕虫单元。 他们不时地在每个级别的任何地方产卵,并可以随机移动,并通过吃掉块体…随机环境事件types来修改体素世界。

问题

我无法解决的问题是如何模拟所有蠕虫并行级别? 和他们吃的块? 如果敌方基地发展壮大,建立新的防御体系等问题也会出现同样的问题。 因为当玩家进入关卡时,自上次造访以来应该会有一些分歧。

我的企图

我所有的单位和建筑物已经分开了逻辑和渲染组件。 所以即使没有被ChunkManager渲染,它们也可以正常工作。 它的工作可能是3级和蠕虫的手工,但如果我增加级别的数量开始变得迟缓(4-10FPS)。 所以这不是正确的路要走,或者是我的代码是废话?

有没有人有任何建议,我怎么能解决这个问题?

编辑

我现在禁用所有没有活动的级别,并且始终重新激活玩家所在的当前级别。因此,我可以更好地管理真正需要计算时间的对象。

我现在得到的问题是如何从一开始就模拟一个级别的进度? 蠕虫单元的例子。 他会横跨整个关卡,并留下一条去除体素的path。 我是否应该采取一种独立的方法来计算将要进行的path或最后的X分钟,还是应该多次调用更新方法来匹配自上次X分钟以来未接来电? 这应该由所有可以修改关卡或产生东西的对象来完成。

选项1减less级别的大小/数量/复杂性

选项2使用WorkerThreads。

选项3不太经常地处理更远的水平。 也许这个频率依赖于玩家目前与这个级别有多近……所以当前级别可能会受到每次更新的影响,邻居级别可能只会在两次更新中受到一次影响,而每隔4-8次更新则只会受到一次影响号)。 超出一定的距离或者没有敌方基地的地方,不要做任何事情。

对于敌方基地建筑这样的事情,也许这也意味着你不仅每n次更新就增加1个体素,而且可能每增加n次就增加n个体素:你仍然可能以这种方式加快速度,因为在那个时间点你在做这个级别的所有操作,完成它,并且继续其他事情(导致更好的caching一致性)。 或者,也许你一次建造一整面墙。 无论看起来效率如何,一举一动,每第n次更新。 你可以在这方面管理什么取决于你的瓶颈是什么,例如,如果添加8个体素而不是1个8个体素,那么你最好坚持每次更新添加更less的体素。

选项4在现有代码中寻找明显的瓶颈; 具体看看围绕体素修改的成本。 不要这样做很长时间,因为它不值得在早期进行重度优化。

关于蠕虫如果他们的身体在不同层次之间stream动,你必须为他们制造一个特殊情况。 只使用可能受到蠕虫影响的体素,例如使用边界框,或者将您的关卡分成较小的部分,并且只在蠕虫周围的部分进行操作,每次更新。