您的位置:首页 > 移动开发 > Unity3D

Unity Sharder帧动画

2015-11-14 14:41 190 查看
如果有看不懂的参数,请参看http://blog.csdn.net/u011244737/article/details/49819751

Shader "Custom/UVAnim_Shader"

{

Properties

{

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

_MainTex("Base(RGB)", 2D) = "white" {}

}

SubShader

{

tags{"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"}

Blend SrcAlpha OneMinusSrcAlpha

Pass

{

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "UnityCG.cginc"

float4 _Color;

sampler2D _MainTex;

struct v2f

{

float4 pos:POSITION;

float2 uv:TEXCOORD0;

};

//封装的函数 实现帧移动

float2 moveUV(float2 vertUV)

{

//一共有几帧

float textureNum = 12.0;

//加速播放时间时使用

float timePerFrame = 100;

//frac 返回小数部分 随着时间增加而循环

float index = frac(_Time.x / textureNum * timePerFrame);

//初始化为第一帧

float2 uvScale = float2(1 / textureNum, 1);

if(index <= uvScale.x)

return vertUV * uvScale;

else if(index <= 2 * uvScale.x)

return vertUV * uvScale + float2(uvScale.x, 0.0);

else if(index <= 3 * uvScale.x)

return vertUV * uvScale + float2(2 * uvScale.x, 0.0);

else if(index <= 4 * uvScale.x)

return vertUV * uvScale + float2(3 * uvScale.x, 0.0);

else if(index <= 5 * uvScale.x)

return vertUV * uvScale + float2(4 * uvScale.x, 0.0);

else if(index <= 6 * uvScale.x)

return vertUV * uvScale + float2(5 * uvScale.x, 0.0);

else if(index <= 7 * uvScale.x)

return vertUV * uvScale + float2(6 * uvScale.x, 0.0);

else if(index <= 8 * uvScale.x)

return vertUV * uvScale + float2(7 * uvScale.x, 0.0);

else if(index <= 9 * uvScale.x)

return vertUV * uvScale + float2(8 * uvScale.x, 0.0);

else if(index <= 10 * uvScale.x)

return vertUV * uvScale + float2(9 * uvScale.x, 0.0);

else if(index <= 11 * uvScale.x)

return vertUV * uvScale + float2(10 * uvScale.x, 0.0);

else

return vertUV * uvScale + float2(11 * uvScale.x, 0.0);

}

v2f vert(appdata_base v)

{

v2f o;

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

o.uv = moveUV(v.texcoord.xy);

//o.uv = v.texcoord.xy * float2(1.0 / 12.0, 1.0);

return o;

}

half4 frag(v2f i):COLOR

{

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

return c;

}

ENDCG

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: