先贴代码
Shader "Custom/FragMove" {
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_MoveSpeed("顶点移动速度(float)",Range(1,20)) = 1.0
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
//输入结构
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _MainTex;
float _MoveSpeed;
v2f vert(appdata data)
{
//
// 名称 类型 说明
// _Time float4 t 是自该场景加载开始所经过的时间,4个分量分别是(t / 20, t, t * 2, t * 3)
// _SinTime float4 t 是时间的正弦值,4个分量分别是(t / 8, t / 4, t / 2, t)
// _CosTime float4 t 是时间的余弦值,4个分量分别是(t / 8, t / 4, t / 2, t)
// unity_DeltaTime float4 dt 是时间增量,4个分量的值分别是(dt, 1 / dt, smoothDt, 1 / smoothDt)
v2f v;
float4 clip;
clip = UnityObjectToClipPos(data.vertex); //顶点在视口上的位置
clip.x = clip.x - _Time.x * _MoveSpeed;
//clip.y =clip.y - sin(_Time.y); //利用正弦函数达到顶点迂回效果
v.vertex = clip;
v.uv = data.uv;
return v;
}
float4 frag(v2f vert) : COLOR //COLOR是输出数据
{
float4 texCol = tex2D(_MainTex, vert.uv);
return texCol;
}
ENDCG
}
}
FallBack "Diffuse"
}
比较重要的有几点
就是指明片段着色器和顶点着色器函数
然后顶点着色器里边利用UnityObjectToClipPos来算出要显示的顶点的数据
利用获取后的数据结合_Time变量来达到不断位移的目的
迂回则需要利用正弦或者余弦函数来达到目的