You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中TreeInstance转世界坐标问题:获取地形树木位置不准确

Unity地形树木世界坐标获取修正

你当前代码获取的treeInstance.position是相对于地形的归一化坐标(取值范围0~1),并非直接的世界坐标,所以需要转换后才能得到正确位置。

正确的转换代码如下:

// 获取当前激活的地形组件及数据
Terrain terrain = Terrain.activeTerrain;
TerrainData terrainData = terrain.terrainData;

foreach (var treeInstance in terrainData.treeInstances)
{
    // 计算树木在地形本地空间的坐标
    Vector3 localPos = new Vector3(
        // x轴:归一化比例 × 地形实际宽度
        treeInstance.position.x * terrainData.size.x,
        // y轴:对应地形高度 + 树木自身高度偏移比例 × 地形高度范围
        terrainData.GetHeight(
            (int)(treeInstance.position.x * terrainData.heightmapWidth),
            (int)(treeInstance.position.z * terrainData.heightmapHeight)
        ) + treeInstance.position.y * terrainData.size.y,
        // z轴:归一化比例 × 地形实际长度
        treeInstance.position.z * terrainData.size.z
    );
    // 转换为世界坐标(加上地形自身的世界位置偏移)
    Vector3 worldPos = localPos + terrain.transform.position;
    resourcePositions.Add(worldPos);
}

关键说明:

  • treeInstance.position.x/z:对应地形宽度/长度的占比,乘以terrainData.size.x/z得到地形本地空间的x/z坐标
  • treeInstance.position.y:是树木相对于地形表面的高度偏移比例,需要结合GetHeight获取的地形基础高度,再加上偏移值
  • 最后必须加上地形对象的transform.position,因为地形可能没有放置在世界原点

内容的提问来源于stack exchange,提问作者ARR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:05:23