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

如何将Unity等距坐标转换回正交网格世界坐标?

解法:从Unity坐标反推网格世界坐标

首先推导逆变换的数学公式,原转换逻辑为:

unityX = 0.5 * World.X - 0.5 * World.Y
unityY = 0.25 + 0.25 * World.X + 0.25 * World.Y

步骤1:整理方程消去偏移

先把unityY的居中偏移量移到等式左侧,再放大系数简化计算:

2 * unityX = World.X - World.Y  --- (1)
4 * (unityY - 0.25) = World.X + World.Y  --- (2)

步骤2:联立求解世界坐标

将两个方程相加,消去World.Y得到World.X的表达式:

2*unityX + 4*(unityY - 0.25) = 2*World.X
World.X = unityX + 2*unityY - 0.5

将两个方程相减,消去World.X得到World.Y的表达式:

4*(unityY - 0.25) - 2*unityX = 2*World.Y
World.Y = 2*unityY - unityX - 0.5

步骤3:实现逆转换函数

由于World是Vector2Int类型,需要对计算结果取整(用Mathf.RoundToInt保证坐标对应正确的网格单元格),最终函数实现如下:

public void ToWorldPosition(Vector2 unityPosition)
{
    float uX = unityPosition.x;
    float uY = unityPosition.y;

    // 计算世界坐标的浮点值
    float worldXFloat = uX + 2 * uY - 0.5f;
    float worldYFloat = 2 * uY - uX - 0.5f;

    // 取整得到整数网格坐标
    Vector2Int newWorld = new Vector2Int(
        Mathf.RoundToInt(worldXFloat),
        Mathf.RoundToInt(worldYFloat)
    );

    // 赋值并触发原有更新逻辑
    World = newWorld;
}

验证示例

  • 当Unity坐标为(0, 0.25)(对应原World=(0,0)),代入计算得到World.X=0、World.Y=0,与原转换一致。
  • 当Unity坐标为(0.5, 0.5)(对应原World=(1,0)),代入计算得到World.X=1、World.Y=0,与原转换一致。
  • 当Unity坐标为(-0.5, 0.5)(对应原World=(0,1)),代入计算得到World.X=0、World.Y=1,与原转换一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:30