【问题标题】:How to convert coordinates in Unity?如何在Unity中转换坐标?
【发布时间】:2019-08-02 08:23:47
【问题描述】:

我有一个 JSON 文件,其坐标 (0.0) 位于左上角(第一张图片)。在 Unity 中 (0.0) 位于屏幕的中心(第二张图片)。我正在寻找一种可以将文件坐标转换为 Unity 坐标的方法。

所以我的问题是如何将第一张图片的坐标转换为 Unity 坐标?

例如在位置 (2.3) 我有字母“A”。如何将其转换为与 Unity 匹配?

我已经尝试过Camera.main.ScreenToWorldPoint,但我总是得到所有输入的相同结果。

这是我得到的:

【问题讨论】:

  • 你知道你正在使用的网格的宽度和高度吗?
  • 是的,我正在获取电路板的宽度和高度。
  • 你的相机在 (0,0) 位置吗?
  • 是相机在 (0,0)。从第一对图像中,如果您从带有字母 A 的左侧网格中看到 (2,3),并且在右侧网格中看到 (2,3),它将位于右上角,这就是我拥有的原因这个问题。
  • 您能否发布当前转换坐标的过程、单个字母的预期结果和该字母的实际结果?

标签: unity3d coordinates


【解决方案1】:

这应该可行:

int unityX = -gridWidth/2 + jsonX/gridWidth * gridWidth;
int unityY = gridHeight/2 - jsonY/gridHeight * gridHeight;

编辑:

我刚刚意识到您可能需要网格中图块中心的位置。在这种情况下,上面的代码需要一些修改:

float unityX = -gridWidth/2 + jsonX/gridWidth * gridWidth + 0.5f;
float unityY = gridHeight/2 - jsonY/gridHeight * gridHeight - 0.5f;

这会将您正在使用的对象放置在它们各自图块的中心。

【讨论】:

  • 我尝试了您的建议,但似乎不起作用。不确定我使用的 gridWidth 和 gridHeight 是否有问题。
  • 当你说“不起作用”时,你到底是什么意思?
  • 我得到不同的坐标并且字母被放置在错误的位置。我添加了到目前为止我得到的截图。
【解决方案2】:

试试这个 python 代码,或者把它翻译成你的语言:

def transformXY(x,y, jsonSizeX,jsonSizeY):
  x -= jsonSizeX/2
  y -= jsonSizeY/2
  return x,y

x,y = getDataFromJson(...)
x,y = transformXY(x,y, jsonMaxX, jsonMaxY)
useInUnity(x,y)

【讨论】:

  • 对不起,但不清楚。请解释或重写你的代码。
【解决方案3】:

我能想到的最简单的方法是在您希望0,0 出现的位置设置一个空的GameObject,然后计算相对于GameObject 的位置

public class CoordinateAdjustment : MonoBehaviour
{
    public GameObject positionAdjustmentGameObject;
    public float cellSize = 1f; // Set to 1f for this example can change to your needs

    public Vector2 GetPosition(int row, int column)
    {
        Vector2 position = new Vector2
        (
            positionAdjustmentGameObject.transform.position.x + (column * cellSize),
            positionAdjustmentGameObject.transform.position.y + (row * cellSize)
        );
        return position;
    }
}

可能需要一些改进,但会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2015-07-06
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    相关资源
    最近更新 更多