我尝试使用以下代码将树添加到我的地形中:
// Create Trees
for (int x = 0; x < terrainData.heightmapWidth; x++)
{
for (int z = 0; z < terrainData.heightmapWidth; z++)
{
if (GetBiome(x, z) == "Grasland")
{
int r = UnityEngine.Random.Range(0, 500);
if (r == 0)
{
Terrain terrain = GetComponent<Terrain>();
TreeInstance treeTemp = new TreeInstance();
treeTemp.position = new Vector3(x, 0, z);
treeTemp.prototypeIndex = 0;
treeTemp.widthScale = 1f;
treeTemp.heightScale = 1f;
treeTemp.color = Color.white;
treeTemp.lightmapColor = Color.white;
terrain.AddTreeInstance(treeTemp);
terrain.Flush();
}
}
}
}函数GetBiome()运行正常,我通过将树设置为GameObjects进行了检查,它运行得很好。
是不是少了什么我没想到的东西?
因为没有生成一棵树。
我想要生成的树设置在PaintTrees下:

发布于 2018-12-21 15:54:33
请阅读我下面的注释,我希望这能解释并解决这个问题。我已经统一测试了这一点以确认。
// Create Trees
//make these float otherwise your position math below is truncated
for (float x = 0; x < terrainData.heightmapWidth; x++)
{
//heightmapHeight not heightmapWidth
for (float z = 0; z < terrainData.heightmapHeight; z++)
{
Terrain terrain = GetComponent<Terrain>();
int r = UnityEngine.Random.Range(0, 500);
if (r == 0)
{
TreeInstance treeTemp = new TreeInstance
//position is local and expects value between 0 and 1
treeTemp.position = new Vector3(x / terrainData.heightmapWidth, 0, z / terrainData.heightmapHeight),
treeTemp.prototypeIndex = 0;
treeTemp.widthScale = 1f;
treeTemp.heightScale = 1f;
treeTemp.color = Color.white;
treeTemp.lightmapColor = Color.white;
terrain.AddTreeInstance(treeTemp);
terrain.Flush();
}
}
}发布于 2020-06-19 16:23:17
有点晚了,但是,不是
int r = UnityEngine.Random.Range(0, 500);
if (r == 0)做
int r = UnityEngine.Random.Range(0, 500);
if (r >= 0 && <= 1) 检查范围。因为你正在检查一个不可能的数字,所以它总是很接近,但永远不会是0例如0.000230...如果你需要像我一样计算它的底数或检查范围
https://stackoverflow.com/questions/53880451
复制相似问题