世界指向等距点 - 需要帮助理解

时间:2015-08-23 06:10:10

标签: 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 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;
}

键:

        x  =  mouse x in world
        y  =  mouse y in world
    scale  =  width of isometric tile
    point  =  mouse point in world
iso_point  =  mouse point on isometric grid

我希望输出看起来像:

enter image description here

输出实际上是什么样的:

enter image description here

我无法理解改变代码的概念,我可能已经花了很长时间并且喝了太多咖啡,但无论我改变什么,它似乎都没有像我想的那样锻炼身体。

随意链接一个关于它如何以数学方式工作的详细教程,但我找不到任何可以帮助我理解如何更改代码的内容。

提前干杯

1 个答案:

答案 0 :(得分:2)

如果你必须把整个公式放在一起,

iso_point.x = point.x/scale - (point.y + 1) / (scale / 2);

在您的情况下,point.x / scale是将鼠标向右移动时增加X的值。如果向上移动鼠标,可以看到iso_point.x将逐点减少.y /(scale / 2)。

scale / 2来自于tile的高度= width / 2

这一事实

当你想要iso_point.x随着point.x和point.y的增加而增加时,你会想要像

这样的东西
iso_point.x = point.x + (point.y * 2) - half_scale;

同样,iso_point.y必须随着point.x的减少和point.y的增加而增加:

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