如果代码中有什么不清楚请查看以下基础知识
Shader基础知识
unity3d 中 七种坐标知识详解
沿x轴y轴方向移动贴图动画
设置移动速度和贴图,就动起来了
Shader "Custom/ScrollSurfaceShader"
{
Properties{
//叠加颜色
_Color("Color", Color) = (1,1,1,1)
//指定贴图
_MainTex("Albedo (RGB)", 2D) = "white" {}
//光泽
_Glossiness("Smoothness", Range(0,1)) = 0.5
//金属度
_Metallic("Metallic", Range(0,1)) = 0.0
//x轴滚动
_ScrollXSpeed("X Scroll Speed", Range(0, 10)) = 0.2
//y轴滚动
_ScrollYSpeed("Y Scroll Speed", Range(0, 10)) = 0.2
}
SubShader{
Tags { "RenderType" = "Opaque" }
LOD 200
//没在pass中,因为时表面着色器
CGPROGRAM
//声明表面着色器
#pragma surface surf Standard fullforwardshadows // Physically based Standard lighting model, and enable shadows on all light types
#pragma target 3.0 // Use shader model 3.0 target, to get nicer looking lighting
sampler2D _MainTex;
//定义输入结构
struct Input {
float2 uv_MainTex;
};
half _Glossiness;
half _Metallic;
fixed4 _Color;
fixed _ScrollXSpeed;
fixed _ScrollYSpeed;
//表面着色器正文 第一个参数为输入,第二个参数为输出
void surf(Input IN, inout SurfaceOutputStandard o)
{
//输入的速度值 * 时间
fixed2 scrollValue = fixed2(_ScrollXSpeed * _Time.y, _ScrollYSpeed * _Time.y);
//uv = 当前的uv值+根据时间变动的值
float2 scrolledUV = IN.uv_MainTex + scrollValue;
//返回小数部分 这是i因为uv 的满值是1,要接受1以内的小数
scrolledUV = frac(scrolledUV);
//镜像播放
//scrolledUV = sin(scrolledUV);
// 设置主色,由贴图颜色 * color设置颜色
fixed4 c = tex2D(_MainTex, scrolledUV) * _Color;
o.Albedo = c.rgb;
//金属
o.Metallic = _Metallic;
//平滑
o.Smoothness = _Glossiness;
//透明度
o.Alpha = c.a;
}
ENDCG
}
//默认效果
FallBack "Diffuse"
}