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

问题描述:

粉色块要相对于棕色块有一定距离的偏移,这个距离要求走配置(用一个文件记录下来),配置的时候是使用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 @   mc宇少  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2019-08-23 recttransform
2018-08-23 List<T>中,Remove和RemoveAt区别
点击右上角即可分享
微信分享提示