一、前语
在Unity中经过操控物体的Transform能够很简略的对物体进行旋转、平移和缩放,得到一些简略的动画作用。但是有个欠好的当地是,一旦这个物体上有磕碰体的话,会跟环境发作磕碰。我就就想能不能在不费事特效动画那儿的情况下,自己用Shader去处理一些根据模型极点或贴图的dong动画作用。如图所示是我彻底运用Shader处理处理的极点的xuan旋转、平移和缩放,别的还有两个是贴图的旋转和平移。Unity的版别为2017.3.1。
贴图的移动
极点的移动
贴图的旋转
极点的旋转
极点的缩放
上面五个类型的操作,其间旋转是比较难的,其他的极点操作都比较简略。
二、完成
1、极点的移动:在Shader代码里设置三个方向的变量_SpeedX、_SpeedY和_SpeedZ,然后再极点改换的时分fen别离加上这个变量就能够来对极点进行位移操作,假如乘以shi时刻就能够得到主动位移的作用了,所以极点Shader代码为:
2、贴图的移动:要害是对UV进行操作,要害的片段Shader部分的代码为
3、极点的缩放:上面的位移是对极点ji进行加操作,而缩放是对极点的值进行乘操作就能够了,要害的极点Shader部分代码为
4、极点的旋转:旋转比较上面的操作会比较难,思路是先核算要旋转的视点,然后得到旋转矩阵,最终直接讲极点的 方位向量和旋转矩阵相乘得到新的极点值,要害的核算函数为:
新的极点的核算并不是每个方向都核算,我这儿只处理了x和z方向的,将新得到的极点方位赋值给输出极点的时分要注意本来的z就是新极点的y极点Shader的代码为:
5、贴图的旋转:这儿要用到一个变量“_MainTex_ST”(假如贴图的名称为“_MainTex”),其实只需涉及到对模型贴图的UV进行位移和偏移操作都要用到这个变量,还必须先声明一下,如下所示:它是一个四维向量,其间xy是贴图的Scale,zw是贴图的offset
先核算当时贴图的缩放份额和偏移相对原点的值div,然后对当时贴图的极点进行旋转,最终加上div得到正在旋转之后的贴图的值,要害代码如下:
三、总结
1、由物体的transform的旋转、平移和缩放测验着完成了Shader对模型极点或贴图的旋转、平移和缩放
2、其实还差一个贴图的缩放,有爱好的朋友能够自己去完成一下,跟旋转操作的变量是共同的