记一次分辨率不同导致的缩放问题

问题描述:

粉色块要相对于棕色块有一定距离的偏移,这个距离要求走配置(用一个文件记录下来),配置的时候是使用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缩放算法:

 

posted @ 2023-08-23 11:58  mc宇少  阅读(33)  评论(0编辑  收藏  举报