Unity 模拟放大镜局部放大UI 效果实现

UI 放大实现

RectTransformUtility.ScreenPointToLocalPointInRectangle(rectScale, eventData.position, eventData.pressEventCamera, out localPos);

使用IPointerDownHandler 获取鼠标点击时的有效负载,并将鼠标坐标转成对应的UI 坐标,rectScale 为需要放大的UI,使用eventData.pressEventCamera 确保相机为点击事件对应的相机。

originalPosX = localPos.x / originalScale;
originalPosY = localPos.y / originalScale;
zoomPosX = originalPosX * zoomScale;
zoomposY = originalPosY * zoomScale;

根据UI 原始的Scale 和放大的Scale 计算UI 放大后鼠标点击对应的位置。

offsetX = localPos.x - zoomPosX;
offsetY = localPos.y - zoomPosY;
scaleRect.localScale = new Vector3(zoomScale, zoomScale, zoomScale);
scaleRect.localPosition += new Vector3(offsetX, offsetY, 0);

计算放大后UI 位置偏移量,根据偏移量放大UI 并移动UI,最终实现UI 根据鼠标点击位置放大的效果。

至此,代码实现的是UI 整体放大,想要模拟放大镜效果可以使用圆形遮罩局部显示UI。

放大镜效果实现

复制一份UI 副本,并给该UI 副本加上圆形遮罩模拟放大镜效果。因使用了IPointerDownHandler 和IPointerUpHandler,可将遮罩和图片副本的Raycast Target 勾选取消以降低出错概率。

rectMask.position = Input.mousePosition;

根据鼠标位置更新遮罩层位置。

rectScale.localPosition = new Vector2((-rectMask.localPosition.x + rect.localPosition.x) * scaleCurrent + rectMask.rect.width * (0.5f - rectMask.pivot.x), (-rectMask.localPosition.y + rect.localPosition.y) * scaleCurrent + rectMask.rect.height * (0.5f - rectMask.pivot.y));

根据遮罩层锚点计算UI 副本的偏移。

效果

相关推荐

  1. 可视化学习:实现Canvas图片局部放大镜

    2024-05-16 07:04:03       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-16 07:04:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-16 07:04:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-16 07:04:03       82 阅读
  4. Python语言-面向对象

    2024-05-16 07:04:03       91 阅读

热门阅读

  1. Elasticsearch:利用Redis缓存解决ES查询延迟问题

    2024-05-16 07:04:03       30 阅读
  2. string类(1)

    2024-05-16 07:04:03       37 阅读
  3. Git服务器(中心仓库(裸仓库))搭建

    2024-05-16 07:04:03       32 阅读
  4. VC++6.0自定义实现日志记录到文件及界面显示

    2024-05-16 07:04:03       33 阅读
  5. 分布式websocket实时通讯的session共享问题

    2024-05-16 07:04:03       31 阅读
  6. 安卓手机APP开发__支持64位的架构

    2024-05-16 07:04:03       30 阅读
  7. 16 | 缓存策略:如何使用缓存来减少磁盘IO?

    2024-05-16 07:04:03       34 阅读
  8. 如何玩转github

    2024-05-16 07:04:03       31 阅读