Unity Shader教程之 贴图旋转效果的简单实现
1、打开Unity,新建一个工程,在场景中添加一个 Plane,合理放置,具体如下图


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

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

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


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,并把把贴图设置上,具体如下图

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


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

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