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) 左右才能将纹理中心稳定在视觉中心。

相关推荐
nnsix1 天前
Unity的dllType Native和Managed的区别
unity·游戏引擎
编码旅者1 天前
《Virt A Mate(VAM)》免安装豪华版v1.22中文汉化整合
游戏引擎·图形渲染·vr·动画
Clank的游戏栈1 天前
AI游戏开发全自动编程课程体系(Cursor版,支持Unity/Cocos, Laya后续支持)
人工智能·unity·游戏引擎
鹿野素材屋1 天前
技术闲聊:为什么网游会在固定时间点,刷出固定的道具?
前端·网络·unity
发际线危机121381 天前
Unity发布apk部分真机虚线采样变成实线问题
unity·游戏引擎
FVV11231 天前
电脑录屏工具Bandicam 无时长限制,支持4K画质
eclipse·游戏引擎·ar·动画·ogre
猫不吃咸鱼2 天前
Unity中攻击检测敌人的多种方法
游戏·unity·c#·游戏引擎
又来0772 天前
Unity 无人机物理模拟开发日志:从零打造穿越机手感
unity·游戏引擎·无人机
CreasyChan2 天前
Unity UniRx Observable 类详解及使用
游戏·unity·c#·游戏引擎
老朱佩琪!2 天前
Unity策略模式
unity·设计模式·策略模式