Unity3D中的可塑造地形?

Unity3D中的可塑造地形?,unity3d,sandbox,terrain,Unity3d,Sandbox,Terrain,我想创造一个可塑造的世界(也可能是程序生成的),但我不知道如何通过脚本来创造它 我对以下几个例子有一些疑问: 地雷艇 从立方体中按程序生成一个可成形的世界很容易,但我不知道如何使其最优化。unity足够强大,可以处理很多立方体吗 地标 在这个游戏中,你可以塑造世界,它使用统一的地形。它和Minecraft相似,但不是立方的。(所以当你在地上挖土的时候,你就像在现实生活中一样挖土。所以你不会像在地雷船上那样一块一块地挖土。) 是否可以在运行时塑造地形 提前谢谢你的帮助 您可以修改Unity内置地形

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

我对以下几个例子有一些疑问:

地雷艇

从立方体中按程序生成一个可成形的世界很容易,但我不知道如何使其最优化。unity足够强大,可以处理很多立方体吗

地标

在这个游戏中,你可以塑造世界,它使用统一的地形。它和Minecraft相似,但不是立方的。(所以当你在地上挖土的时候,你就像在现实生活中一样挖土。所以你不会像在地雷船上那样一块一块地挖土。)

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


提前谢谢你的帮助

您可以修改Unity内置地形的高度贴图:。您需要根据需要定义某种类似画笔的绘制陨石坑。

您可以修改Unity内置地形的高度图:。你将需要定义一些类似画笔的画坑,这取决于你的需要

从立方体中按程序生成可成形的世界很容易

简短的回答,不,这不容易。您必须使用某种类型的噪波来生成高度贴图(如体素噪波)

团结足够强大,可以处理很多立方体吗

不,就其自身而言,unity无法很好地处理minecraft克隆所需的立方体数量。从统计学上讲,您永远无法看到立方体的所有6个面,因此渲染所有6个面是浪费时间的。此外,每个立方体都有自己的碰撞器,碰撞器会很快使物体变得杂乱无章。此外,如果多维数据集被其他多维数据集阻止,则不需要渲染该多维数据集。所有这些都需要复杂的优化代码,以便在您修改地形和穿越世界时高效运行

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

是的,这是我偷来的一些代码:

函数开始()
{
地形=获取组件(地形);
var-nRows=50;
var-nCols=50;
var高度=新浮动[nRows,nCols];
对于(var j=0;j
下面是关于
TerrainData.SetHeights()的文档

从立方体中按程序生成可成形的世界很容易

简短的回答,不,这不容易。您必须使用某种类型的噪波来生成高度贴图(如体素噪波)

团结足够强大,可以处理很多立方体吗

不,就其自身而言,unity无法很好地处理minecraft克隆所需的立方体数量。从统计学上讲,您永远无法看到立方体的所有6个面,因此渲染所有6个面是浪费时间的。此外,每个立方体都有自己的碰撞器,碰撞器会很快使物体变得杂乱无章。此外,如果多维数据集被其他多维数据集阻止,则不需要渲染该多维数据集。所有这些都需要复杂的优化代码,以便在您修改地形和穿越世界时高效运行

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

是的,这是我偷来的一些代码:

函数开始()
{
地形=获取组件(地形);
var-nRows=50;
var-nCols=50;
var高度=新浮动[nRows,nCols];
对于(var j=0;j
下面是关于
TerrainData.SetHeights()的文档


您计划在什么平台上运行?这个问题已经被问了1000次。资产商店里有很多minecraft初学者儿童和体素初学者工具包,或者,你甚至可以在附近找到免费软件(查看Unity论坛等)。(你无法想象自己可以从头开始编程,这需要2-3年的时间。)只需谷歌“Unity minecraft kits”。这类一般性的问题是针对gamedev.com的,这里不是。是的,这是非常可能的,但正如@JoeBlow所强调的,它需要大量的学习。尽管商店里有资产,我还是建议先学习,例如,这里的这个家伙:他所做的是生成陆地,但这是你想要的“控制你的地形”的一部分,所以这是做这种事情的游说团Tudvari问了大量这个问题,你打算在什么平台上运行?这个问题已经被问了1000次了。资产商店里有很多minecraft初学者儿童和体素初学者工具包,或者,你甚至可以在附近找到免费软件(查看Unity论坛等)。(你无法想象自己可以从头开始编程,这需要2-3年的时间。)只需谷歌“Unity minecraft kits”。这类一般性的问题是针对gamedev.com的,这里不是。是的,这是非常可能的,但正如@JoeBlow所强调的,它需要大量的学习。尽管商店里有资产,我还是建议先学习,比如这里的这个家伙:他所做的是生成陆地,但这是你想要的“控制你的地形”的一部分,所以这是做这种事情的游说团Tudvari有大量的这个问题被问到,只有谷歌
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);
}