Unity UGUI shader 帧动画

Unity UGUI shader 帧动画

在某些情况下,手里有一个特效序列的整张图,我们可以试用这个shader,可以减少切图制作帧动画prefab的工序,可以可以解决制作成为粒子特效后,粒子与UGUI屏幕自适应不能兼容,粒子与UGUI ScreollView剪裁比兼容等问题。
1.首先,直接下载Unity的内置shader,拿出UI的默认shader进行修改。
2.在shader 属性字段增加代码

 /*******************************************/
         _RowCount("Row Count", Float) = 1
        _ColumnCount("Column Count", Float) = 1
        _FrameRate("Frame Rate", Float) = 30
/*******************************************/

三个变量可以在材质球界面进行修改,分别代表序列帧图片的行数、列数、和动画帧率。

3.在CGPROGRAM中引入变量的声明:

 /*******************************************/
      float _RowCount;
      float _ColumnCount;
      fixed _FrameRate;
/*******************************************/

4.通过计算,获得当前帧的正确UV。(建议写在定点shader里面,网上很多参考写在了片元shader)。

 /*******************************************/
       float width = 1 / _ColumnCount;
       float height = 1 / _RowCount;
       float sinceFrames = floor(_Time.y * _FrameRate) % (_RowCount * _ColumnCount);
       float row = floor(sinceFrames / _ColumnCount);
       float column = floor(sinceFrames % _ColumnCount);
       half2 uv = half2((column / _ColumnCount + v.texcoord.x * width), ((_RowCount - row - 1) / _RowCount) + v.texcoord.y * height);
                OUT.texcoord = uv;
/*******************************************/

计算写的很繁琐,只是为了把逻辑厘清,实际上可以通过公式进行进一步的简化,如若需要使用,这步可以自行进行。
最后看下效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后修改下混合模式,我们也可以直接使用特效的高管贴图进行亮度叠加。

 /*******************************************/
Blend SrcAlpha One
/*******************************************/

在这里插入图片描述
效果:
在这里插入图片描述
效果不错吧!而且可以完美配合UGUI的使用。最后需要说明下,shader虽然会根据时间切换帧,但是如果没有其他的UI触发UGUI的重绘事件的情况下,Game View 是不会重绘的,看起来像是停在某一帧,一般情况下应该会触发的,实在没触发,可以 自己写一个脚本去强制这个Image进行重绘。
完整代码:
https://download.csdn.net/download/u014621871/14883668
(有积分的大佬,助我混点吧。。。)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值