地形树实例无法正确设置

Terrain tree instances cannot be set correctly

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

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) 坐标附近。

请帮忙!

这里的问题是您将 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);
}