前言
需要实现如题的一个功能,通俗的说就是鼠标滚轮缩放图片,而且是以鼠标在图片上的位置 进行缩放,焦点固定在鼠标尖的功能。
效果先看看效果:
这个使用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")
关注
打赏
热门博文
- Unity3d 插件着色器(Shader)报错Too many texture interpolators...和‘vert‘: output parameter ‘o‘ not ...修复记录
- Unity3d C# 网址url未转义问题(https%3A%2F%2F => https://)网址无法打开问题 URL is missing a protocol e.g. http://...
- Unity3d C# 使用Universal Media Player(ump)插件播放视频的众坑之无法播放视频和VLC播放器依赖的问题
- 软考高级软件架构风格定义以及分类
- Unity 使用NVIDIA FleX for Unity插件实现制作软体、水流流体、布料等效果学习教程
- Unity3d 使用统一可寻址资产系统(Addressables)实现服务器资源热更新和资源版本管理等功能(含源码)
- Unity3d minigame-unity-webgl-transform插件转换微信小游戏报错To use dlopen, you need to use Emscripten‘s...问题
- Unity 利用Skybox Panoramic着色器制作全景图预览有条缝隙问题解决办法
- Unity3d C# 开发微信小游戏分享图片、朋友圈等功能实现(含源码)
- Unity3d Windows播放视频(视频流)功能组/插件支持对比