记一次分辨率不同导致的缩放问题
问题描述:
粉色块要相对于棕色块有一定距离的偏移,这个距离要求走配置(用一个文件记录下来),配置的时候是使用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缩放算法:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-08-23 recttransform
2018-08-23 List<T>中,Remove和RemoveAt区别