SpriteOrderAnim.shader 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  2. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  3. Shader "WNWL/Particles/SpriteOrderAnim"
  4. {
  5. Properties
  6. {
  7. _Color("Color Tint",Color) = (1,1,1,1)
  8. _MainTex("main tex" ,2D) = ""{}
  9. _Row("行",Int) = 1
  10. _Column("列",Int) = 1
  11. _Speed("speed",Range(0,10)) = 1
  12. [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("Dst Blend Mode", float) = 1
  13. }
  14. SubShader
  15. {
  16. Tags{ "RenderType" = "Transparent" "IgnoreProjector" = "True" "Queue" = "Transparent" }
  17. Pass
  18. {
  19. Blend SrcAlpha [_DstBlend]
  20. Cull Off Lighting Off ZWrite off
  21. CGPROGRAM
  22. #pragma vertex vert
  23. #pragma fragment frag
  24. #include "UnityCG.cginc"
  25. struct v2f
  26. {
  27. float4 pos:POSITION;
  28. float2 uv:TEXCOORD0;
  29. };
  30. half4 _Color;
  31. sampler2D _MainTex;
  32. float4 _MainTex_ST;
  33. int _Row;
  34. int _Column;
  35. float _Speed;
  36. v2f vert(appdata_base v)
  37. {
  38. v2f o;
  39. o.pos = UnityObjectToClipPos(v.vertex);
  40. o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
  41. return o;
  42. }
  43. fixed4 frag(v2f IN) :COLOR
  44. {
  45. float2 uv = IN.uv;
  46. float cellX = uv.x / _Column;
  47. float cellY = uv.y / _Row;
  48. //Sprite总数
  49. int count = _Row * _Column;
  50. //在0到count-1 范围内循环
  51. int SpriteIndex = fmod(_Time.w*_Speed,count);
  52. //当前Sprite所在行的下标
  53. int SpriteRowIndx = (SpriteIndex / _Column);
  54. //当前Sprite所在列的下标
  55. int SpriteColumnIndex = fmod(SpriteIndex,_Column);
  56. //因uv坐标左下角为(0,0),第一行为最底下一行,为了合乎我们常理,我们转换到最上面一行为第一行,eg:0,1,2-->2,1,0
  57. SpriteRowIndx = (_Row - 1) - fmod(SpriteRowIndx,_Row);
  58. //乘以1.0转为浮点数,不然加号右边,整数除以整数,还是整数(有误)
  59. uv.x = cellX + SpriteColumnIndex*1.0 / _Column;
  60. uv.y = cellY + SpriteRowIndx*1.0 / _Row;
  61. half4 c = tex2D(_MainTex,uv);
  62. c.rgb *= _Color;
  63. return c;
  64. }
  65. ENDCG
  66. }
  67. }
  68. FallBack "Diffuse"
  69. }