【问题标题】:Terrain tree instances cannot be set correctly无法正确设置地形树实例
【发布时间】:2019-09-23 20:21:32
【问题描述】:

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

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

请帮忙!

【问题讨论】:

  • 那么 10f / Terrain.activeTerrain.terrainData.heightmapResolution 的值是多少?我敢打赌它接近于零
  • @Bizhnan 是的,它接近它,但不是那么接近

标签: c# unity3d terrain unity3d-terrain


【解决方案1】:

这里的问题是您将 x 和 y 坐标与 Terrain.activeTerrain.terrainData.heightmapResolution 分开,这是不正确的。

假设您的地形高度图分辨率为 2049(2 + 1 的幂),但您的地形尺寸为 1250 * 500。您仍将 x 和 y 除以 2049,但您应该除以 1250 和 500。

您应该使用采样数据

Terrain.activeTerrain.terrainData.heightmapWidthx 坐标 Terrain.activeTerrain.terrainData.heightmapHeight 为 y 坐标。

更正的代码sn-p:

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);
}

【讨论】:

  • 谢谢...我什至不知道为什么我只使用分辨率
  • 很高兴我能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 2012-05-19
  • 1970-01-01
  • 2019-05-09
  • 2015-05-29
  • 2017-01-03
相关资源
最近更新 更多