UI同步屏幕自适应

可以看到我们是一个框选的功能 我的想法是 在 UI上面做一个Img 去进行一个框选 这个时候我是这么实现的

cs 复制代码
 public Rect GetSelectionAreaRect()
 {
     Vector2 selectionEndMousePosition = Input.mousePosition;
     var lowerLeftCorner = new Vector2
     (
         Mathf.Min(selectionStartMousePosition.x, selectionEndMousePosition.x),
         Mathf.Min(selectionStartMousePosition.y, selectionEndMousePosition.y)
         );
     var upperRightCorner = new Vector2
     (
         Mathf.Max(selectionStartMousePosition.x, selectionEndMousePosition.x),
         Mathf.Max(selectionStartMousePosition.y, selectionEndMousePosition.y)
     );
     return new Rect(
         lowerLeftCorner.x,
         lowerLeftCorner.y,
         upperRightCorner.x - lowerLeftCorner.x,
         upperRightCorner.y - lowerLeftCorner.y

         );

 }

这部分代码是 计算当前的 鼠标的起始点 和 鼠标的终点 之后构建一个矩阵

矩阵的 是按照左下角进行算的 那么当前的UI锚点也是 左下

要不然你的位置是不对的

之后你要在

cs 复制代码
   var localScale = canvas.transform.localScale.x;//自适应UI
   Rect selectionAreaRect = UnitSelectionManager.Instance.GetSelectionAreaRect();
   selectionUI.anchoredPosition = new Vector2(selectionAreaRect.x, selectionAreaRect.y)/ localScale;
   selectionUI.sizeDelta = new Vector2(selectionAreaRect.width, selectionAreaRect.height)/ localScale  ;

计算一个canvas 的缩放 这个是因为你的是UI的 所发 如果是 1920 1080的缩放来计算的化 到 其他的大小你的canvas 就会进行变更我们要根据当前的 canvas所发进行计算到最终的点举一个例子

修改后

你应该就发现问题 所以你要根据当前的 矩阵 是根据屏幕大小来计算的 所以要 / 屏幕的缩放了

相关推荐
UXbot7 小时前
如何选择适合公司项目的UI设计工具?企业选型指南
前端·低代码·ui·团队开发·原型模式·设计规范·web app
UXbot11 小时前
原型设计工具如何帮助新人快速进入产品行业?
前端·低代码·ui·交互·团队开发·原型模式·web app
烈焰晴天14 小时前
Codex 桌面端如何链接Figma MCP 服务器拿到 Figma设计稿精准尺寸等结构化数据 来精准还原UI
服务器·ui·figma
狼哥168618 小时前
防沉迷控制实战新特性接入
ui·华为·harmonyos
狼哥168621 小时前
学习卡片案例新特性接入
ui·华为·harmonyos
zdr尽职尽责1 天前
Unity录像功能
学习·ui·unity·游戏引擎
山东布谷网络科技1 天前
海外直播语聊APP功能与UI升级的关键关注点
开发语言·ui·app store·谷歌上架·海外直播app开发·海外语聊平台搭建·多语言直播平台定制
鹤卿1232 天前
(OC)UI学习——网易云仿写
ui·ios·objective-c
一个被程序员耽误的厨师2 天前
04-实践篇-让AI生成可视化页面-ai-json-ui的落地实践
人工智能·ui·json
秋雨梧桐叶落莳2 天前
iOS——QQ音乐仿写项目总结
学习·macos·ui·ios·mvc·objective-c·xcode