这篇博客是为了我亲爱的宇哥写的,希望它能够快点学习,尽快的掌握unity引擎。
此代码实现的实现功能是,让一个纹理动态的滚动起来,模拟水体滚动的效果;
原理是:获取主要纹理的uv,让uv乘以_Time,进行实时的位置计算。
废话不多说,代码在下面:
Shader "Custom/gundong" {
Properties{
//定义一个主纹理
_MainTex("主要纹理",2D)="white"{}
//定义一个u向的初始速度
_SpeedX("U速度",Range(0.1,12))=1
//定义一个v向的初始速度
_SpeedY("V速度",Range(0.1,12))=1
}
SubShader{
//标签渲染类型 几何体
Tags{"RenderType"="Opaque"}
CGPROGRAM
//指定unity 内置Lambert光照模型
#pragma surface surf Lambert
//输出结构体
struct Input{
//定义主纹理uv
float2 uv_MainTex;
};
sampler2D _MainTex;
float _SpeedY;
float _SpeedX;
void surf(Input IN,inout SurfaceOutput o){
//获取主纹理uv 给一个给 变量 mainVU
float2 mainVU=IN.uv_MainTex;
//速度和_Time相乘 给 X Y
fixed X=_SpeedX*_Time;
fixed Y=_SpeedY*_Time;
//主要UV 动态加上 x y
mainVU+=fixed2(X,Y);
//反射 主纹理
o.Albedo=tex2D(_MainTex,mainVU).rgb;
}
ENDCG
}
FallBack "Diffuse"
}