Экземпляры дерева ландшафта не могут быть установлены правильно - PullRequest
0 голосов
/ 23 сентября 2019

Я сейчас экспериментирую с деревьями ландшафта, но застрял в манипулировании их положением.Следующий скрипт, насколько я знаю, должен работать, он также преобразует положение в локальные координаты местности, но ничего не происходит.

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).

Пожалуйста, помогите!

1 Ответ

1 голос
/ 23 сентября 2019

Проблема в том, что вы делите свои координаты x и y на Terrain.activeTerrain.terrainData.heightmapResolution, что неверно.

Представьте, что ваше разрешение карты высот ландшафта составляет 2049 (степень двойки + 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);
}
...