如何扩大我的世界/级别的大小以包含更多游戏对象,而又不会对玩家造成延迟?

我正在为资产商店创建资产。它是一个随机的程序世界生成器。只有一个主要问题:世界规模。

我不知道如何扩大世界以容纳更多物体/瓷砖。

  • 我生成的世界多达2000x500个图块,但它的滞后性非常严重。
  • 不会影响游戏速度的最大世界是
    约500x200的图块。
  • 我用较小的块生成了相同大小的世界:大小的1/4(不会影响您可以生成多少个图块)

  • 我想创建一个至少大小为4200x1200块的世界,而没有滞后峰值。
  • 我看过对象池(似乎无法帮助我)
    这么多)
  • 我看过LoadLevelAsync(真的不知道如何使用它,
    谣言是您需要我没有的Unity Pro)
  • 我尝试根据玩家将块设置为 Activity 或非 Activity
    位置(这比仅留下障碍物造成更多的滞后)。

  • 附加信息:
    地形被分成几块。它是2d,并且我在所有实心砖/块上都有盒子对撞机。玩家可以挖掘/放置积木。我并不担心关卡最初加载所花费的时间,而是担心游戏进行时的流畅性-玩时不会出现延迟现象。

    question on Unity Forums

    最佳答案

    如果要将每个图块存储为单独的GameObject,请不要这样做。每当将每个块挖掘或放置在其上时,使用纹​​理图集和“块数据”来生成每个块的外观。

    还请确保禁用,甚至可能删除不在播放器可见范围内的任何块。如果您可以一次计算出将需要的最大块数,并在它们离开屏幕时回收它们,那么对象池将在这里大有帮助。

    细节:

    关于最佳生成,有很多事情要讨论,因此我将发布此链接(http://studentgamedev.blogspot.co.uk/2013/08/unity-voxel-tutorial-part-1-generating.html),它向您展示了如何在3D空间中进行操作,但是对于2D来说,原理几乎是相同的,即使不是那么容易空间。以下只是可能涉及的内容的粗略概述,走这条道路将带来巨大的好处,但要实现这一目标将需要大量的工作。我已经在答案的底部列出了所有好处。

    可以将每个图块做成具有最简单形式的类似int idvector2d texturePosbool visible的字段的简单结构。然后,您可以将这些图块存储在每个块中的二维数组中,但是为了使它们更高效地存储,您可以将texturePos一次存储在程序中的其他位置,并编写一种通过texturePos获取id的方法。

    当您对表示添加或移除拼贴的二维数组进行更改时,将更新块,后者是用于表示拼贴的实际GameObject。通过迭代存储在块中的图块数据,将可能基于二维数组中每个图块的位置生成顶点网格。如果visible为false,则完全不为其生成任何顶点。

    单独使用此网格物体可以用作对撞机,但看起来不会像任何东西。还必须生成恰好是texturePos的UV坐标。当Unity然后显示网格时,它将显示纹理图集的特定点,该特定点由网格的UV坐标定义。

    这样做的好处是可以大大减少GameObject,减少Unity的纹理批处理,减少内存使用,对任何图块进行更快的随机访问,因为它没有任何MonoBehaviour开销,并且确实有很多额外的好处。

    关于unity3d - 如何在Unity中创建更大的世界/关卡而不增加延迟?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32147152/

    10-12 04:26