记一次分辨率不同导致的缩放问题
问题描述:
粉色块要相对于棕色块有一定距离的偏移,这个距离要求走配置(用一个文件记录下来),配置的时候是使用16:9的分辨率。
在其它分辨率下,导致粉色块和棕色块的偏移有出入。
原因:因为canvas设置的是screenspace-camera,scalemode是scalewithscreensize,其他分辨率会对整个canvas进行缩放,但配置的偏移向量不会跟着缩放,所以会导致这个问题。
解决方法:
对配置的偏移向量进行和canvas一致的缩放处理。
Canvas mainCanvas = CommonController.GetCanvasMainCanvas(); float ratio = 1; if (mainCanvas != null) { CanvasScaler canvasScaler = mainCanvas.GetComponent<CanvasScaler>(); if (canvasScaler != null) { //存数据时的分辨率设置 float defaultRatio = ((2048.0f * 1536.0f) / 1152.0f) / 2048.0f; //使用数据时的分辨率设置 float curRatio = ((Screen.width * canvasScaler.referenceResolution.y) / Screen.height) / canvasScaler.referenceResolution.x; ratio = curRatio / defaultRatio; } } Dictionary<int, Vector3[]> result = new Dictionary<int, Vector3[]>(); foreach(var v in dictSlotPosCache[curId]) { Vector3[] posArray = new Vector3[v.Value.Length]; for(int i=0;i<v.Value.Length;i++) { posArray[i] = new Vector3(v.Value[i].x * ratio, v.Value[i].y * ratio, v.Value[i].z * ratio); } result.Add(v.Key, posArray); }
canvasscaler缩放算法: