C# 世界点到等轴测点-需要帮助理解

C# 世界点到等轴测点-需要帮助理解,c#,unity3d,isometric,C#,Unity3d,Isometric,现在我知道这个问题已经在这个网站和其他很多网站上被问了几百次并回答了几百次,但是我找不到一个解释来解释为什么计算是有效的,以及我如何根据自己的需要来改变它 这是我目前的职能: //Converts X, Y from the 2D World to a Point in the Isometric Grid public static Vector2 WorldToIsometric(float x, float y, int scale) { Vector2 point = new V

现在我知道这个问题已经在这个网站和其他很多网站上被问了几百次并回答了几百次,但是我找不到一个解释来解释为什么计算是有效的,以及我如何根据自己的需要来改变它

这是我目前的职能:

//Converts X, Y from the 2D World to a Point in the Isometric Grid
public static Vector2 WorldToIsometric(float x, float y, int scale)
{
    Vector2 point = new Vector2(x, y);
    Vector2 iso_point = new Vector2(point.x, point.y);
    float half_scale = scale / 2;

    iso_point.x = point.x - (point.y * 2) + half_scale;
    iso_point.y = point.x + (point.y * 2) - half_scale;

    iso_point.x /= scale;
    iso_point.y /= scale;

    iso_point.x = Mathf.Floor (iso_point.x);
    iso_point.y = Mathf.Floor (iso_point.y);

    return iso_point;
}
关键:

我希望输出是什么样子的:

输出的实际外观:

我只是无法理解更改代码的概念,我可能已经花了很长时间,喝了太多的咖啡,但是无论我做什么更改,它似乎都不像我想象的那样有效

请随意链接一个详细的教程,介绍它在数学上是如何工作的,但是我找不到任何真正能帮助我理解如何修改代码的东西


提前干杯

如果你必须把整个公式组合起来

iso_point.x = point.x/scale - (point.y + 1) / (scale / 2);
在您的例子中,point.x/scale是在您向右移动鼠标时增加x的值。如果您向上移动鼠标,您可以看到iso_point.x将减少点.y/(比例/2)

比例/2来自瓷砖的高度=宽度/2这一事实

当您希望iso_point.x随着point.x和point.y的增加而增加时,您将需要

iso_point.x = point.x + (point.y * 2) - half_scale;
同样,随着点x的减小和点y的增大,iso_点y必须增大:

iso_point.y = -point.x + (point.y * 2) - half_scale;

我要做个测试,已经很晚了,我已经做了很长时间了,但这个简单的解释完全有道理。。。迄今为止,我一直在阅读复杂的数学解释,我终于在脑子里明白了这一切是如何运作的
iso_point.y = -point.x + (point.y * 2) - half_scale;