前言
需要实现如题的一个功能,通俗的说就是鼠标滚轮缩放图片,而且是以鼠标在图片上的位置 进行缩放,焦点固定在鼠标尖的功能。
效果先看看效果:
这个使用UGUI的思路就是在鼠标滚轮滚动的时候,根据鼠标位置计算图片的轴心点和对应于轴心点保持图片不移动的位置信息,让后将这些数值动态的赋值给图片,最后根据滚轮前后赋值缩放值。
实现 搭建UI这里以一张地图截图为例,针对不同的位置进行缩放,方便查看。并使用了scroll view 进行了裁剪。
鼠标的滚动事件主要通过OnScroll(PointerEventData eventData)实现,滚轮后触发缩放操作。
//滚轮事件
public void OnScroll(PointerEventData eventData)
{
ZoomImgByMousePos();
}
计算位置偏移
计算鼠标位置与对象位置偏移值
float OffsetX = Input.mousePosition.x - ZoomObj.position.x;
float OffsetY = Input.mousePosition.y - ZoomObj.position.y;
计算轴心点(pivot)
根据偏移、边长和缩放计算轴心点
float PivotX = OffsetX / RectTran.rect.width / ZoomObj.localScale.x;
float PivotY = OffsetY / RectTran.rect.height / ZoomObj.localScale.y;
赋值
设置轴心和位置
RectTran.pivot += new Vector2(PivotX, PivotY);
ZoomObj.position += new Vector3(OffsetX, OffsetY, 0);
缩放实现
根据滚轮缩放,同时进行缩放范围限制
if (Input.GetAxis("Mouse ScrollWheel") > 0)
ZoomObj.localScale += (ZoomObj.localScale.x >= MaxScale ? Vector3.zero : Vector3.one * 0.1f);
else if (Input.GetAxis("Mouse ScrollWheel")
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?