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所发进行计算到最终的点举一个例子

修改后

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

相关推荐
电子云与长程纠缠15 小时前
UE5魂系游戏开发教程05
开发语言·学习·游戏·ui·ue5
特立独行的猫a1 天前
AI时代的应用开发神器:cj-tauri 已支持鸿蒙 PC,第一次的踩坑记录
ui·harmonyos·tauri·仓颉·鸿蒙pc·cj-tauri
Caroline5162 天前
GPT Image 2.5 + DeepSeek V4.1 Flash-1017:从游戏 UI 设计到 3D 项目生成
gpt·游戏·ui·ai 编程·gpt image 2.5
布莱克6053 天前
QtWidgets 与 QML:两大 UI 开发框架的全面对比
开发语言·c++·qt·ui·架构
n87654 天前
Playwright Java WEB UI 自动化实现框架与逻辑
java·前端·ui
Cx330❀4 天前
深入浅出 Qt 绘图机制:从 QPainter 到四大图像类解析
开发语言·qt·ui·性能优化·图形渲染
Oll Correct4 天前
Adobe illustrator 案例十一:城堡图标绘制
ui·adobe·illustrator
沫璃染墨5 天前
《Qt从零入门系列(十四):QThread多线程详解——从线程创建到客户端阻塞处理》
开发语言·c++·笔记·qt·ui·交互·线程
特立独行的猫a6 天前
仓颉语言GUI开发实战:用仓颉写串口/网络二合一调试助手
网络·ui·gui·harmonyos·tauri·仓颉