如何更正Unity中对象的更改位置?

时间:2014-08-07 00:24:07

标签: c# unity3d

我目前有一个代码可以在GameObjects中生成一个2D数组,我目前的属性是:

Width: 1920
Height: 1080
Camera Size: 540
2D Array size: 30x16
Each block represents 64x64 pixels

我的问题是我将块从-960定位到960(1920宽度)和-540到540.但是当我这样做时,应该位于第一个位置的块被错误地放在上面: enter image description here

因此,从相机的视野来看,可能大多数人都会想到我必须将一半的块宽度添加到其x位置,并且一半的块高度从y位置开始减小,但是当我尝试时,这个事迹: enter image description here

代码:

float height = Camera.main.orthographicSize *2f;
    float width = height / (float)Screen.height * (float)Screen.width;
    Destroy(map);
    map = new GameObject();
    print("W: "+width+". H: "+height);
    lastH=height;
    lastW=width;
    for (int i=0; i<30; i++) {
        for (int j=0; j<16; j++) {
            if(mapa[i,j]>0){
                GameObject aux = objetos[mapa[i,j]-1];
                float wX=aux.transform.localScale.x,hY=aux.transform.localScale.y;
                print ("wX: "+wX+", hY: "+hY);
                float unidadeW = 2*(float)lastW/(float)(20*wX);
                float unidadeH = 2*(float)lastH/(float)(20*hY);
                //aux.transform.localScale = new Vector3(unidadeW,unidadeH,0);
                GameObject t = (GameObject)Instantiate(aux, new Vector2(j*wX*0.64f-width/2,-i*hY*0.64f+height/2),Quaternion.identity);
                t.transform.parent = map.transform;
            }
        }
    }
OBS:有几件我不再使用的东西,因为我改变了代码,所以不要在它中间。

我问,为什么?

1 个答案:

答案 0 :(得分:0)

两个单位之间距离的正确方法是对角线,见下图: enter image description here

无论哪个是你的定位点,如果它的左上角或中心,块之间的距离将是√2*侧,所以我之间的正确距离大约是22,我可以通过它找到它做这个等式:

sqrt(2)/2*32=22.62(64x64的两个图块之间的正确距离),而不是在最后一个x使用64+而在最后一个y使用64+,正确的方法是添加22.62 at两次乘法。