地形树实例无法正确设置
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);
}
我目前正在试验地形树,但我一直在操纵它们的位置。据我所知,以下脚本应该可以工作,它还将位置转换为局部地形坐标,但没有任何反应。
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);
}