zoukankan      html  css  js  c++  java
  • Unity Shader播放序列帧动画

     1 Shader "LordShader/AnimateSprite" {
     2     Properties {
     3         _MainTint ("Diffuse Color", Color) = (1,1,1,1)            //颜色属性,可以在u3d inspector面板控制该变量
     4         _MainTex("Base (RGB)",2D) = "white" {}  //贴图
     5         _TexWidth("Sheet Width",float) = 0.0    //贴图宽度像素值
     6         _SpriteFrameNum("Sprite Frame Counts",float) = 9.0  //总帧数
     7         _Speed("Speed ",Range(0.01,32)) = 12    //播放速度
     8     }
     9     SubShader {
    10         Tags { "RenderType"="Opaque" }
    11         LOD 200
    12         
    13         CGPROGRAM    
    14         #pragma surface surf Lambert
    15 
    16         fixed4 _MainTint;            //主颜色
    17         sampler2D _MainTex;            //主贴图
    18         float _TexWidth;            //贴图宽度像素值
    19         float _SpriteFrameNum;        //动画帧数
    20         float _Speed;                //播放速度
    21         float  _TimeValue;            //从脚本传递过来的数
    22 
    23         struct Input {
    24             float2 uv_MainTex;
    25         };
    26 
    27         void surf (Input IN, inout SurfaceOutput o) {
    28             float2 spriteUV = IN.uv_MainTex;
    29             float uAddPerFrame = 1 / _SpriteFrameNum;         //每一帧U值的增量
    30             
    31             //获取一个0 1 2 3 循环的值 
    32             //fmod 返回 x/y 的余数(取模)。如果 y 为 0 ,结果不可预料
    33             float timeVal = fmod(_Time.y * _Speed,_SpriteFrameNum);  //进行取余数操作 得到当前要显示的图片的下标
    34             timeVal = ceil(timeVal);
    35             
    36             //float timeVal = _TimeValue;        //_TimeValue直接通过脚本传递 material.SetFloat("_TimeValue",timeVal);    
    37             float xValue = spriteUV.x;            //UV坐标中的X坐标(0到9)
    38             xValue *= uAddPerFrame;                //把UV值指定到第一张小图的范围 注意
    39 
    40             xValue += timeVal * uAddPerFrame; //每次执行把图片切下一张小图,累加u的增量值
    41             spriteUV = float2(xValue,spriteUV.y);        
    42             fixed4 c = tex2D (_MainTex, spriteUV) * _MainTint;
    43             o.Albedo = c.rgb * _MainTint;
    44             o.Alpha = c.a;
    45         }
    46         ENDCG
    47     } 
    48     FallBack "Diffuse"
    49 }

     

  • 相关阅读:
    数据库练习
    数据库的设计范式知识
    asserts文件存到外部SD卡里
    用户的注册信息存储到文件里,登录成功后读出并显示出来
    java快速排序引起的StackOverflowError异常
    并发入库面临重复数据的问题
    《旅行青蛙》安卓版本修改钱和奖券
    ddmlib问题总结——同步获取设备信息
    Java ArrayList中对象的排序 (Comparable VS Comparator)
    Authentication(Spring Security 认证笔记)
  • 原文地址:https://www.cnblogs.com/beeasy/p/6057235.html
Copyright © 2011-2022 走看看