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 副本的偏移。

效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/704182.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】:基于决策树与随机森林对数据分类

机器学习实验报告:决策树与随机森林数据分类 实验背景与目的 在机器学习领域,决策树和随机森林是两种常用的分类算法。决策树以其直观的树形结构和易于理解的特点被广泛应用于分类问题。随机森林则是一种集成学习算法,通过构建多个决策树并…

SSM整合-前后端分离-实现增删改查 (下)

主流框架SSM 实现功能03-添加家居信息需求分析/图解思路分析代码实现注意事项和细节 实现功能04-显示家居信息需求分析/图解思路分析代码实现 实现功能05-修改家居信息需求分析/图解思路分析代码实现注意事项和细节 实现功能06-删除家居信息需求分析/图解思路分析代码实现课后作…

文心一言 VS 讯飞星火 VS chatgpt (252)-- 算法导论18.2 5题

五、因为叶结点无需指向孩子结点的指针,那么对同样大小的磁盘页面,可选用一个与内部结点不同的(更大的) t 值。请说明如何修改 B 树的创建和插人过程来处理这个变化。如果要写代码,请用go语言。 文心一言: 当我们在B树&#xff…

物联网设计竞赛_5_Jetson Nano连接摄像头解决运行卡顿问题

我在命令行用camorama命令打开摄像头的时候发现摄像头非常流畅 当我用python的cv2库打开摄像头的时候发现摄像头显示图片异常卡顿,在网上多方寻觅无果后,经过偶然尝试,我发现了卡顿原来是视频帧率问题 淘宝官方资料看我的摄像头只有30fps, …

84.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-筛选与技能有关的数据包

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

C++动态内存区域划分、new、delete关键字、泛型编程、函数模版、类模版

目录 一、C/C中程序的内存区域划分 为什么会存在内存区域划分? 二、new关键字 1、内置类型的new/delete使用方法: 2、new和delete的本质 3、常见面试题——malloc/free和new/delete的区别 三、模版 1、泛型编程 2、函数模版 (1&…

XMind 头脑风暴/思维导图软件_V24.04.10291 PC高级版

一款风靡全球的头脑风暴和思维导图软件,为激发灵感和创意而生。在国内使用广泛,拥有强大的功能,包括思维管理,商务演示,与办公软件协同工作等功能。XMind中文版采用全球先进的Eclipse RCP软件架构,是集思维…

python:SunMoonTimeCalculator

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看: # 描述: https://github.com/Broham/suncalcPy # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # Datetime : 2024/5/14 21:59 # User …

百面算法工程师 | YOLOv6面试考点原理全解析

本文给大家带来的百面算法工程师是深度学习目标检测YOLOv6面试总结,文章内总结了常见的提问问题,旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中,我们还将介绍一些常见的深度学习目标检测面试问题,并提供参考的回答…

【练习】分治--快排思想

🎥 个人主页:Dikz12🔥个人专栏:算法(Java)📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 颜色分类 题目描述 题解 代码实现 排序数组 题目描述 题解 代码…

Shell之常用命令

目录 1.排序工具--sort命令 1.1 快读查找一个目录中最大文件 2.去重工具--uniq命令 2.1 分析判断远程登录错误次数,禁止该用户远程登录 3.修改工具--tr命令 4.列截取工具--cut命令 5.分割文件工具--split命令 6.合并文件列--paste命令 7.扫描工具--eval命令…

YOLOv8改进教程|加入可改变核卷积AKConv模块,效果远超DSConv!

⭐⭐ YOLOv8改进专栏|包含主干、模块、注意力机制、检测头等前沿创新 ​ ⭐⭐ 一、 论文介绍 论文链接:https://arxiv.org/abs/2311.11587 代码链接:GitHub - CV-ZhangXin/AKConv 论文速览::AKConv是2023年11月发表的一种可变卷积…