需求
棋盘是放在世界中的,在各种分辨率下棋盘占据屏幕的相对宽度需要保持不变。
因此我需要根据屏幕的分辨率动态改变摄像机的大小来达到这样的效果。
mCameraWorld.orthographicSize = 10f;
2D项目采用的正交视图,摄像机的基础大小为10。屏幕设计分辨率为1080*1920
摄像机orthographicSize属性代表的是摄像机照射范围高度的一半
红色的为摄像机照射范围,10 代表摄像机高度的一半
摄像机照射范围和UI重合。
可以计算得出摄像机宽为 1080/1920 * 20 = 11.25
要保持棋盘在UI中所占宽的比例不变,就需要使摄像机的宽在任何情况下都为 11.25
当屏幕分辨率发生改变,就可以倒推出摄像机的大小。
当屏幕分辨率改为1125*2436 时,屏幕的高是宽的 2436/1125 = 2.16倍。
摄像机的总高度应为 11.25 * 2.16 = 24.3;
最终得出摄像机的大小为 24.3/2 = 12.15;
下面贴出代码
private void GetCameraSize() {
float designScreenHeight = 1920;
float designScreenWidth = 1080;
float designCameraSize = 10;
float designCameraWidth = designScreenWidth / designScreenHeight * (designCameraSize*2);
float currCameraHeight = Screen.height / Screen.width * designCameraWidth;
float currCameraSize = currCameraHeight / 2;
}
//*2 和 /2 并不必要,只是为了逻辑清晰。
如此就可以动态设置摄像机的大小,从而达到,棋盘占屏幕宽度比例不变的效果。