Unity以任意点为中心放大UGUI
在缩放地图等物体时,缩放中心往往是鼠标中心。
方案1,修改轴心
当然,更改轴心是一种思路,不过在Unity编辑器中修改轴心时,位置会一起移动。
而在代码中修改轴心时,位置不会跟着动,整个界面会歪掉,需要再次计算位置,不太方便。
方案2,先缩放,再计算位置
轴心其实就是物体的坐标原点,我们想让一个点为缩放中心,实际上就是要保证缩放前后位置不变。
例如(100,100),放大1.2倍到了(120,120),我们还想让这个点显示在(100,100)的位置上,就需要把整体位置移动(-20,-20)。
具体代码如下(rect就是要缩放的rectTransform):
public void Scale(float cur_Scare,Vector2 center_ScreenPos)
{
//缩放中心屏幕坐标转RectTransform下坐标
Vector2 center_Local;
RectTransformUtility.ScreenPointToLocalPointInRectangle(rect, center_ScreenPos, Camera.main, out center_Local);
//计算中心坐标的当前位置
float old_Scare = rect.localScale.x; //原缩放比例
float old_px = center_Local.x / old_Scare;
float old_py = center_Local.y / old_Scare;
float cur_pxPos = old_px * cur_Scare;
float cur_pyPos = old_py * cur_Scare;
//计算偏移量
float deltaX = center_Local.x - cur_pxPos;
float deltaY = center_Local.y - cur_pyPos;
rect.localScale = new Vector3(cur_Scare, cur_Scare, 1);
rect.localPosition += new Vector3(deltaX, deltaY, 0);
}
注意,这是锚点全在(0.5,0.5)的情况,有锚点固定的请自行设置offsetMin和offsetMax
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)