Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获得正确的unity主摄像头尺寸?_C#_Math_Unity3d - Fatal编程技术网

C# 如何获得正确的unity主摄像头尺寸?

C# 如何获得正确的unity主摄像头尺寸?,c#,math,unity3d,C#,Math,Unity3d,正如我所知,相机的正确尺寸是您想要的宽度的一半,因此在我的情况下: Width: 1920 Height: 1080 Camera Size: 540 Each block represents 64x64 pixels 在unity中,我遇到了这个问题,因为我开始在-960中放置块(1920年的一半,这是相机的minimun x): 如图所示,只需将块宽度的一半加在x上,然后在y上减去块高度的一半,就可以了: 经过多次尝试,我发现它应该被放置在-938和518,距离拐角22个单位,通过放置在

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

Width: 1920
Height: 1080
Camera Size: 540
Each block represents 64x64 pixels
在unity中,我遇到了这个问题,因为我开始在-960中放置块(1920年的一半,这是相机的minimun x): 如图所示,只需将块宽度的一半加在x上,然后在y上减去块高度的一半,就可以了: 经过多次尝试,我发现它应该被放置在-938和518,距离拐角22个单位,通过放置在该位置,这是我的结果: (暂时忽略其他块,它们现在使用错误的算法)

所以我要问的是: 为什么是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;
                }
            }
        }
float height=Camera.main.orthographicSize*2f;
浮动宽度=高度/(浮动)屏幕高度*(浮动)屏幕宽度;
销毁(地图);
map=新游戏对象();
打印(“W:+宽度+”.H:+高度);
lastH=高度;
lastW=宽度;

对于(int i=0;i两个单位之间的正确距离是它们的对角线,请参见下图:

无论哪一个是方向点,如果是左上角还是中心,块之间的距离将是√2*side,所以我和我之间的正确距离是22左右,我可以通过这个等式来找到它:

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

这是一个包含在Unity中制作2D游戏的基本方面。向下滚动一点,您将看到一节讨论Unity2D中正交摄影机的大小。