Unity中的大型场景,远远超过一个地形?

时间:2018-04-09 15:41:26

标签: unity3d

想象一下Unity中的大型自由漫游游戏,

enter image description here

黄色大小表示您可以在Unity中制作典型地形的最大尺寸。

艺术部。将完全建立,米,整个场景。

请注意,这与重复风景(如跑步者)或程序性风景(如某些比赛游戏)完全无关。

真的,在Unity中执行此操作的正确和好方法是什么?

  • 使用大约50个左右的地形,每个大约100米x 100米?
  • 你甚至可以拥有或使用那么多的地形吗?

或者什么?

对于在Google上搜索的人。

确实是正确的解决方案

地形拼接

  • 是的。

在实践中,您必须使用其中一个可用的工具(例如,TerrainFormer),或者您的团队将从头开始编写地形缝合器。

是的,您只需使用"许多地形"。

4 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是使用MeshFilterMesh API生成程序网格,但您提到这一点并非随机或生成,因此可以消除一个。

  

它只是一个非常长,薄,手工制作的环境

在这种情况下,最好的方法是模块化关卡设计。您需要创建模块化资产。有了这个,您就可以拥有一条可以拼接的长路。一个优秀的建模艺术家应该能够使用Blender,Maya或3ds Max等3D建模软件包创建和纹理模块化资源。

程序员所要做的就是让每个资产成为预制件然后使用Instantiate函数来实例化它们以创建任何环境距离。您还可以从编辑器在场景中创建静态环境。几乎任何东西都可以制成模块化资产,尤其是建筑物和道路。

在Unity中组装之后,您可以使用Unity StaticBatchingUtility.Combine对所有实例化模块化部件进行静态批处理,以提高游戏性能,因为它们不会被移动。

以下是模块化道路资产的示例,可用于创建几乎任何数量的道路:

enter image description here

答案 1 :(得分:2)

您已经回答了问题

  

在这种情况下,最好不要打扰Unity的优秀Terrain,并且建模师会直接建造长路线/风景吗? (显然你必须把它整理好所有这一切都很好)

我认为这是要走的路。如果性能存在问题,请尝试将每个块放在不同的场景中,然后使用主场景加载它们asyncadditively。当然,您希望卸载每个场景,因为它在相机中变得不可见。

我个人采用自己的解决方案,让Unity Occlusion Culling系统负责隐藏和显示块。如果我没有以这种方式获得足够的性能,我只会采用单独的场景方法。

答案 2 :(得分:1)

我最近遇到了同样的问题。我们建立了一个基于瓦片的无限跑道与道路交叉口。相机被放置在汽车的后方和上方俯视街道和玩家车。所以设置非常可比。

我们使用资产商店中的Curvy来创建移动玩家的路径,以及在街道中创建街道和周围环境的几何形状。

https://assetstore.unity.com/packages/tools/level-design/curvy-splines-7038

使用弯曲路径生成切片并在运行时将它们组合起来也很容易。因此,您可以将长距离分成较小的段并随机生成它们。

我们还使用ProCore的QuickBrush快速将环境细节绘制成树木,灌木或石头等几何体。我认为procore工具现在在新的Unity 2018版本中实现。

工作得很好。

答案 3 :(得分:1)

解决确切问题的最佳方法,

实际上只是:

"使用大量的Terrains"。

在Unity中,拥有许多(几十个)Terrain单元似乎是完全可行的,基本上#34;彼此相邻并且#34;

在实践中,您需要 TerrainFormer

https://assetstore.unity.com/packages/tools/terrain/terrain-former-20052

或其中一个类似工具

(或者,我想,从头开始编写你自己的工具来缝合地形,让你一次操纵它们,完美地加入边缘高度等等。)

将现有的Terrains(手工)完美地搭配起来,匹配所有的边缘等等,实际上是不可能的。所以你需要一个"缝合机"用于将许多地形方块放在一起的包。

所以,这个巨大的区域..

enter image description here

大约有12个地形。

这就是答案,你确实可以拥有许多,很多"在Unity项目中的地形,你确实基本上只是让它们彼此相邻并且#34;。在实践中,除非您使用TerrainFormer之类的编辑器工具,否则无法实现。