Unity实现UV的中心缩放

1. 手动计算偏移量(通用方法)

此方法通过数学运算直接调整UV坐标,适用于编写自定义Shader或支持节点式编辑的ShaderGraph中。

基本原理是​:

  1. 将原点移至中心 :从原始UV坐标中减去 (0.5, 0.5),使坐标范围变为 [-0.5, 0.5],原点移至纹理中心。
  2. 进行缩放 :将平移后的坐标乘以Tiling值(例如 (2,2))。
  3. 将原点移回 :将缩放后的坐标加上 (0.5, 0.5),使原点回到左下角,但缩放锚点已是中心。

在Shader代码或ShaderGraph的Tiling And Offset节点中,这可以简化为一个公式:newUV = (originalUV - 0.5) * Tiling + 0.5。本质上,这是通过在缩放前后补偿一个由Tiling值决定的偏移量来实现的。

2. 使用Unity的TRANSFORM_TEX宏(Unity Shader便捷方法)

如果在编写Unity Surface Shader或顶点/片元着色器,可以使用Unity内置的TRANSFORM_TEX宏。这个宏会自动处理材质面板上设置的Tiling和Offset值。

只需在着色器代码中这样使用:

复制代码
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);

它会自动执行 v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw 这一变换。其中,_MainTex_ST.xy 是Tiling值,_MainTex_ST.zw 是Offset值。

​*要实现中心缩放,关键在于设置正确的Offset值 。通常,Tiling值为 (n, n) 时,对应的Offset值需要设置为 (-(n-1)/2, -(n-1)/2) 左右才能将纹理中心稳定在视觉中心。

相关推荐
小贺儿开发9 小时前
Unity3D 智慧城市管理平台
数据库·人工智能·unity·智慧城市·数据可视化
June bug1 天前
【领域知识】休闲游戏一次发版全流程:Google Play + Apple App Store
unity
星夜泊客1 天前
C# 基础:为什么类可以在静态方法中创建自己的实例?
开发语言·经验分享·笔记·unity·c#·游戏引擎
dzj20211 天前
PointerEnter、PointerExit、PointerDown、PointerUp——鼠标点击物体,则开始旋转,鼠标离开或者松开物体,则停止旋转
unity·pointerdown·pointerup
心前阳光1 天前
Unity 模拟父子关系
android·unity·游戏引擎
在路上看风景1 天前
26. Mipmap
unity
咸鱼永不翻身1 天前
Unity视频资源压缩详解
unity·游戏引擎·音视频
在路上看风景1 天前
4.2 OverDraw
unity
在路上看风景1 天前
1.10 CDN缓存
unity
ellis19702 天前
Unity插件SafeArea Helper适配异形屏详解
unity