Unity Shader教程之 贴图旋转效果的简单实现

2025-10-21 00:38:33

1、打开Unity,新建一个工程,在场景中添加一个 Plane,合理放置,具体如下图

Unity Shader教程之 贴图旋转效果的简单实现

Unity Shader教程之 贴图旋转效果的简单实现

2、在场景中导入一张中心对称的图片,具体如下图

Unity Shader教程之 贴图旋转效果的简单实现

3、在工程中新建一个 Shader,命名为 RotateShader,双击打开进行编辑,具体如下图

Unity Shader教程之 贴图旋转效果的简单实现

4、RotateShader 脚本具体代码如下图

Unity Shader教程之 贴图旋转效果的简单实现

Unity Shader教程之 贴图旋转效果的简单实现

5、RotateShader 脚本具体内容如下:

Shader "Custom/RotateShader" {

Properties{

_Color("Color", Color) = (1, 1, 1, 1)

_MainTex("Main Texture", 2D) = "white"{}

_RSpeed("Rotate Speed", Range(1, 100)) = 10

}

SubShader{

tags{"Queue" = "Transparent"

"RenderType" = "Transparent"

"IgnoreProjector" = "True"

}

Blend SrcAlpha OneMinusSrcAlpha

Pass{

Name "RotateShader"

Cull off

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "UnityCG.cginc"

float4 _Color;

sampler2D _MainTex;

float _RSpeed;

struct v2f{

float4 pos : POSITION;

float4 uv : TEXCOORD0;

};

v2f vert (appdata_base v){

v2f o;

o.pos = mul(UNITY_MATRIX_MVP, v.vertex);

o.uv = v.texcoord;

return o;

}

half4 frag(v2f i) : COLOR{

float2 uv = i.uv.xy - float2(0.5, 0.5);

uv = float2(uv.x * cos(_RSpeed * _Time.x) - uv.y * sin(_RSpeed * _Time.x), 

uv.x * sin(_RSpeed * _Time.x) + uv.y * cos(_RSpeed * _Time.x));

uv += float2(0.5, 0.5);

half4 c = tex2D(_MainTex, uv) * _Color;

return c;

}

ENDCG

}

}

}

6、脚本编译正确,回到unity,在工程中添加一个材质,可以命名为 RotateMaterial,把材质的 Shader 设置为刚才新建的 RotateShader,并把把贴图设置上,具体如下图

Unity Shader教程之 贴图旋转效果的简单实现

7、然后把材质赋给 Plane,运行场景,具体如效果如下图

Unity Shader教程之 贴图旋转效果的简单实现

Unity Shader教程之 贴图旋转效果的简单实现

8、发现旋转时边缘有重复图案,把贴图的 Wrap Mode 设置为 Clamp,具体如下图

Unity Shader教程之 贴图旋转效果的简单实现

9、运行场景,即会发现边缘的重复图案消失了,具体如下图

Unity Shader教程之 贴图旋转效果的简单实现

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢