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

Unity格罗宁根1:1城市项目 minimap经纬度计算偏移问题排查

1:1比例格罗宁根城市项目小地图位置偏移问题:出生点对齐,远离后偏移递增

我是一名实习生,正在开发荷兰格罗宁根1:1比例的城市项目,目前已经实现了小地图功能,但遇到了一个问题:在出生点位置时,玩家位置和小地图完全对齐,但随着玩家远离出生点,小地图上的位置偏移会逐渐增大。

我已经将游戏内的x/z坐标转换为米来计算经纬度,但误差依然存在。以下是完整的miniMapManager代码,重点请关注translateCoordinates()方法:

// 完整miniMapManager代码
public class miniMapManager : MonoBehaviour
{
    // 省略其他成员变量与初始化逻辑

    // 重点关注的坐标转换方法
    private Vector2 translateCoordinates(Vector3 worldPosition)
    {
        // 游戏坐标转米(根据项目实际转换系数)
        float worldToMeterScale = 1f; // 示例系数,实际根据项目设定
        float meterX = worldPosition.x * worldToMeterScale;
        float meterZ = worldPosition.z * worldToMeterScale;

        // 米转经纬度(基于出生点原点坐标)
        const float earthRadius = 6378137f;
        float originLat = 53.219383f; // 格罗宁根大致纬度
        float originLon = 6.566502f;  // 格罗宁根大致经度

        float deltaLon = (meterX / earthRadius) * Mathf.Rad2Deg;
        float deltaLat = (meterZ / earthRadius) * Mathf.Rad2Deg;

        float targetLon = originLon + deltaLon;
        float targetLat = originLat + deltaLat;

        // 经纬度转小地图纹理坐标
        float minLon = 6.54f;
        float maxLon = 6.59f;
        float minLat = 53.20f;
        float maxLat = 53.23f;

        float mapPosX = (targetLon - minLon) / (maxLon - minLon) * mapTexture.width;
        float mapPosY = (maxLat - targetLat) / (maxLat - minLat) * mapTexture.height;

        return new Vector2(mapPosX, mapPosY);
    }

    // 省略其他绘制、更新逻辑
}

我录制了演示视频,能直观看到出生点位置对齐正常,玩家移动越远,小地图位置偏移越明显的现象。

希望有经验的开发者能帮忙排查问题根源,感谢!

内容的提问来源于stack exchange,提问作者Thomas de Haas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:07:26