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

问题描述 投票:3回答:4

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

enter image description here

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

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

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

真的,在Unity中这样做的正确和好方法是什么?

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

或者是什么?


对于在这里谷歌搜索的人。

确实是正确的解决方案

Terrain stitching

  • 而已。

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

是的,你只需要使用“很多地形”。

unity3d
4个回答
2
投票

这样做的正确方法是使用MeshFilterMesh API生成程序网格,但是你提到这根本不是随机的或生成的,所以一个被淘汰。

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

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

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

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

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

enter image description here


2
投票

你已经回答了你的问题

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

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

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


1
投票

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

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

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

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

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

工作得很好。


1
投票

提出确切问题的最佳方法,

事实上只是:

"use lots of Terrains".

在Unity中,拥有许多(几十个)Terrain单元似乎是完全可行的,基本上“彼此相邻”。

在实践中,你需要TerrainFormer

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

或其中一个类似的工具。

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

实际上不可能将许多地形完美地坐在一起(手工),匹配所有边缘等等。所以你需要一个“缝合”包来将许多地形方块放在一起。

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

enter image description here

有大约12个地形。

这就是答案,你确实可以在Unity项目中拥有“很多很多”Terrain,你确实只是“让他们彼此相邻”。实际上,除非使用TerrainFormer之类的编辑器工具,否则无法实现。

© www.soinside.com 2019 - 2024. All rights reserved.