Unity3D中的可成形地形?

时间:2016-08-05 11:25:39

标签: unity3d sandbox terrain

我想制作一个可塑的世界(也可能是程序生成的),但我不知道如何通过脚本制作它。

有一些例子我有几个问题:

的Minecraft

从立方体制作程序生成的可塑形世界很容易,但我不知道如何使其成为最佳。团结是否足以处理很多立方体?

在这个游戏中你可以塑造世界,它使用像地形一样的Unity。它与Minecraft类似,但不像立方体。 (所以当你在地下挖掘时,你就像在现实生活中一样挖掘。所以你不要像在我的世界中那样用立方体挖掘立方体)

是否可以塑造地形运行时?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以修改Unity内置地形的高度图:TerrainData.SetHeights。你需要定义某种类似画笔的画笔,取决于你的需要。

答案 1 :(得分:1)

  

很容易从多维数据集中创建一个程序生成的可成形世界

简短回答,不是不容易。您必须使用某种类型的噪声来生成高度图(如体素噪声,here's a blog tutorial

  

[是]团结足够强大处理很多立方体?

不,它自己的统一性不会很好地处理Minecraft克隆所需的立方体数量。从统计学上讲,你永远无法看到立方体的所有6个面,因此渲染所有6个面都是浪费。此外,每个立方体都有自己的对撞机,很快就会混乱。如果多维数据集被其他多维数据集阻止,也不需要呈现该多维数据集。所有这些都需要复杂的优化代码,以便在您修改地形和移动世界时使其高效运行。

  

是否可以塑造地形运行时?

是的,这是我从this question偷走的一些代码:

function Start()
{
    terrain = GetComponent(Terrain);
    var nRows = 50;
    var nCols = 50;
    var heights = new float[nRows, nCols];
    for (var j = 0; j < nRows; j++)
        for (var i = 0; i < nCols; i++)
            heights[j,i] = Random.Range(0.0,1.0);
    terrain.terrainData.SetHeights (0,0,heights);
}

这是关于TerrainData.SetHeights()的文件 https://docs.unity3d.com/ScriptReference/TerrainData.SetHeights.html