c# - 地形树实例无法正确设置

标签 c# unity3d terrain unity3d-terrain

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

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

关于c# - 地形树实例无法正确设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58069688/

相关文章:

c# - Unity C#无法从迭代器返回值。使用yield return语句返回一个值,或使用yield break结束迭代

unity3d - 显示 1 无相机渲染

python - 使菱形方形分形算法无限大

c# - 使用 Kinect 线程

c# - ASP MVC、延迟加载和 JSON 序列化。如何填写其他属性?

c# - 如何通过简单的绑定(bind)使用多个 ViewModel

c# - linq - 字符串列表 - 仅按字母排序,然后按数字排序

c# - 音频源播放2分钟后执行一些操作

path - 铯路径到地形 : line connecting 2 points goes under the terrain

python - 创建高程/高度场 gdal numpy python