如何获得正确的统一主摄像头尺寸?

时间:2014-08-07 01:29:35

标签: c# math unity3d

据我所知,相机的正确尺寸是您想要的宽度的一半,所以在我的情况下:

Width: 1920
Height: 1080
Camera Size: 540
Each block represents 64x64 pixels

在团结中我通过开始在-960(1920年的一半,即相机最小x)中放置块来解决这个问题: enter image description here 因为如图所示我想,只需将一半的块宽度添加到其x,并在其y中减去其高度的一半,所以这会发生: enter image description here 经过多次尝试,我发现它应该被放置在-938和518,距离角落22个单位,通过放置在那个位置这是我的结果: enter image description here (暂时忽略其他块,现在它们的算法错误了)

所以我要问的是: 为什么22?如何从我的起始值中获得该值? (请不要回答类似2.032%的问题,因为它的数学计算可能会有更多整数)

如果需要代码:

        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*wX/100-width/2+wX*wX/200,-i*hY*hY/100+height/2-hY*hY/200),Quaternion.identity);
                    t.transform.parent = map.transform;
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

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

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

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