您当前的位置: 首页 >  unity

十幺卜入

暂无认证

  • 3浏览

    0关注

    119博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity3d UGUI以鼠标位置点为中心缩放图片(含项目源码)

十幺卜入 发布时间:2021-06-09 17:30:00 ,浏览量:3

前言

需要实现如题的一个功能,通俗的说就是鼠标滚轮缩放图片,而且是以鼠标在图片上的位置 进行缩放,焦点固定在鼠标尖的功能。

效果

先看看效果:

在这里插入图片描述

思路

这个使用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")             
关注
打赏
1663314737
查看更多评论
0.0812s