Unity3D 中的可塑地形?
Shapable terrain in Unity3D?
我想制作一个可变形的世界(也可能是程序生成的),但我不知道如何通过脚本制作它。
有几个例子我有几个问题:
我的世界
用立方体制作一个程序生成的可塑世界很容易,但我不知道如何使它最佳。 unity 是否足以处理大量立方体?
地标
在这个游戏中你可以塑造世界,它像地形一样使用 Unity。它类似于 Minecraft,但不像立方体。 (所以当你在地下挖掘时,就像在现实生活中一样挖掘。所以你不会像在 Minecraft 中那样逐个立方体挖掘)
是否可以塑造地形运行时?
提前感谢您的帮助!
您可以修改Unity内置的地形高度图:TerrainData.SetHeights。您将需要定义某种画笔,例如绘制火山口,具体取决于您的需要。
It is easy to make a procedurally generated shapable world from cubes
简答,不,这并不容易。您将不得不使用某种类型的噪声来生成高度图(例如体素噪声,here's a blog tutorial)
[Is] unity strong enough the handle a lot of cubes?
不,它本身并不能很好地处理 minecraft 克隆所需的立方体数量。从统计学上讲,您永远无法看到立方体的所有 6 个面,因此渲染所有 6 个面是一种浪费。此外,每个立方体都有自己的对撞机,很快就会变得混乱。如果一个立方体被其他立方体阻挡,您也不需要渲染它。所有这些都需要复杂的优化代码才能在您修改地形和在世界中移动时高效地 运行。
Is it possible to shape the terrain runtime?
是的,这是我从 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
我想制作一个可变形的世界(也可能是程序生成的),但我不知道如何通过脚本制作它。
有几个例子我有几个问题:
我的世界
用立方体制作一个程序生成的可塑世界很容易,但我不知道如何使它最佳。 unity 是否足以处理大量立方体?
地标
在这个游戏中你可以塑造世界,它像地形一样使用 Unity。它类似于 Minecraft,但不像立方体。 (所以当你在地下挖掘时,就像在现实生活中一样挖掘。所以你不会像在 Minecraft 中那样逐个立方体挖掘)
是否可以塑造地形运行时?
提前感谢您的帮助!
您可以修改Unity内置的地形高度图:TerrainData.SetHeights。您将需要定义某种画笔,例如绘制火山口,具体取决于您的需要。
It is easy to make a procedurally generated shapable world from cubes
简答,不,这并不容易。您将不得不使用某种类型的噪声来生成高度图(例如体素噪声,here's a blog tutorial)
[Is] unity strong enough the handle a lot of cubes?
不,它本身并不能很好地处理 minecraft 克隆所需的立方体数量。从统计学上讲,您永远无法看到立方体的所有 6 个面,因此渲染所有 6 个面是一种浪费。此外,每个立方体都有自己的对撞机,很快就会变得混乱。如果一个立方体被其他立方体阻挡,您也不需要渲染它。所有这些都需要复杂的优化代码才能在您修改地形和在世界中移动时高效地 运行。
Is it possible to shape the terrain runtime?
是的,这是我从 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