Unity3d 如何转换统一坐标?

Unity3d 如何转换统一坐标?,unity3d,coordinates,Unity3d,Coordinates,我有一个JSON文件,其中坐标(0.0)位于左上角(第一张图片)。在Unity中(0.0)位于屏幕中央(第二张图片)。我正在寻找一种方法,可以将文件的坐标转换为Unity坐标 所以我的问题是如何将第一张图片的坐标转换成单位坐标 例如,在位置(2.3)处,我有字母“A”。如何将其转换为与统一相匹配 我已经尝试过Camera.main.ScreenToWorldPoint,但对于所有输入,我总是得到相同的结果 这就是我得到的: 试试这段python代码,或者将其翻译成您的语言: def trans

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

所以我的问题是如何将第一张图片的坐标转换成单位坐标

例如,在位置(2.3)处,我有字母“A”。如何将其转换为与统一相匹配

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

这就是我得到的:

试试这段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)
这应该起作用:

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;

这会将您正在处理的对象放置在它们各自的分幅的中心。

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

公共类协调调整:单一行为
{
公共游戏对象位置调整游戏对象;
public float cellSize=1f;//在本例中设置为1f可以根据您的需要进行更改
公共向量2 GetPosition(int行,int列)
{
矢量2位置=新矢量2
(
positionAdjustmentGameObject.transform.position.x+(列*单元格大小),
positionAdjustmentGameObject.transform.position.y+(行*单元格大小)
);
返回位置;
}
}

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

您知道正在使用的网格的宽度和高度吗?是的,我正在获取板的宽度和高度。您的摄像头是否处于(0,0)位置?是的,摄像头处于(0,0)位置。从第一对图像中,如果你看到(2,3)在左边的网格上有字母A,也看到(2,3)在右边的网格上,它将位于右上角,这就是我遇到这个问题的原因。你能发布你当前的坐标转换过程吗,一封信的预期结果和该信的实际结果?抱歉,这还不清楚。请解释或重写你的代码。我试过你的建议,但似乎不起作用。不确定我使用的gridWidth和gridHeight是否有问题。当你说“不工作”时,你的确切意思是什么?我得到了不同的坐标,字母放在了错误的位置。我添加了一个截图,显示了到目前为止我得到的东西。