{Unity} Unity2D camera size和分辨率

2d camera, unit坐标,单位换算

2d游戏可以使用平行投影的camera,这种camera需要设置size (orthographicSize),size的含义为屏幕高度的一半,不过单位不是像素而是unit坐标,即通过pixels to units换算的坐标。例如:屏幕高度为640,pixels to units为100的情况下,orthographic size为640/2/100 = 3.2
unit坐标我理解就是一个统一化的坐标,不用担心他的实际含义,只是提供一个统一的坐标给游戏各个组成部分使用。相应的sprite的尺寸也可通过pixels to units换算成unit 坐标,并且每个sprite都可以单独设置,这等于给资源多加了一个调整的参数。
设置camrea的size实际上控制了显示区域的大小,size越大,能看到的世界越大,当然世界里面的sprite会相应缩小,因为实际的屏幕就那么大。当然由于移动设备的屏幕尺寸多样,如何设置这个size就是多分辨率适配的策略了,比如设定size为某个值不变,这相当于fix height模式,由于不同屏幕宽高比不同,这会导致显示的宽度不一样,这就需要根据宽度调整显示的内容了(不过适配问题基本都是UI问题,而Unity的GUI自带了自适应的策略所以基本不是问题了,当然仍然要考虑非GUI部分的适应,比如不能让原计划一屏内显示的游戏关卡出屏被切)。再如设定一个固定的设计分辨率的宽度,然后通过宽高比来计算出camera size,这就属于fix width模式,这比较适合竖屏游戏。

用于计算camera的unit单位尺寸的代码:
var camera = camera_obj.GetComponent ();
float orthographicSize = camera.orthographicSize;
float aspectRatio = Screen.width * 1.0f / Screen.height;

    float cameraHeight = orthographicSize * 2;
    float cameraWidth = cameraHeight * aspectRatio;
    Debug.Log ("camera size in unit=" + cameraWidth + "," + cameraHeight);

获取sprite unit单位尺寸的代码:
Vector2 spriteSize = sprite_obj.GetComponent ().sprite.bounds.size;

你可能感兴趣的:(Unity)