1

我目前正在试验地形树,但我一直在操纵它们的位置。据我所知,以下脚本应该可以工作,它还将位置转换为当地地形坐标,但没有任何反应。

private void SetTrees()
{
    var Trees_On_Terrain = Terrain.activeTerrain.terrainData.treeInstances;
    for (int i = 0; i < Trees_On_Terrain.Length; i++)
    {
       Trees_On_Terrain[i].position = new Vector3(10f / 
       Terrain.activeTerrain.terrainData.heightmapResolution, 0f, 10f / 
       Terrain.activeTerrain.terrainData.heightmapResolution);
    }
    Terrain.activeTerrain.terrainData.SetTreeInstances(Trees_On_Terrain, true);
}

它们被放入(0,0,0)坐标附近。

请帮忙!

4

1 回答 1

3

这里的问题是你正在划分你的 x 和 y 坐标,Terrain.activeTerrain.terrainData.heightmapResolution这是不正确的。

想象一下你的地形高度图分辨率是 2049(2 + 1 的幂),但你的地形尺寸是 1250 * 500。你仍然要将 x 和 y 除以 2049,但你应该除以 1250 和 500。

您应该使用采样数据

Terrain.activeTerrain.terrainData.heightmapWidth为 x 坐标 Terrain.activeTerrain.terrainData.heightmapHeight为 y 坐标。

更正的代码片段:

private void SetTrees()
{
   var Trees_On_Terrain = Terrain.activeTerrain.terrainData.treeInstances;
   for (int i = 0; i < Trees_On_Terrain.Length; i++)
   {
      Trees_On_Terrain[i].position = new Vector3(10f / Terrain.activeTerrain.terrainData.heightmapWidth, 0f, 10f / Terrain.activeTerrain.terrainData.heightmapHeight);
   }
   Terrain.activeTerrain.terrainData.SetTreeInstances(Trees_On_Terrain, true);
}
于 2019-09-23T20:26:41.150 回答