UnityShader实现百叶窗效果
本文实例为大家分享了UnityShader百叶窗展示的具体代码,供大家参考,具体内容如下
shader实现以上百叶窗效果,主要通过shader实现C#只是做开关控制
看到一篇文章弄的比较复杂,觉得可以都通过shader来实现,就动手了。
shader定义了2张texture,自己随便找2张图片拖进去就行。
Shader"Unlit/NewUnlitShader" { Properties { _MainTex("Texture",2D)="white"{} _MainTex2("Texture2",2D)="white"{} _StartFlag("开始标记",float)=0 _SpeedFactor("速度",Range(0.01,10))=0.1 _StartTime("时间初始标记,不要手动设置",float)=1 _Column("百叶窗的列数",float)=5 } SubShader { Tags{"RenderType"="Opaque"} LOD100 Pass { CGPROGRAM #pragmavertexvert #pragmafragmentfrag //makefogwork #pragmamulti_compile_fog #include"UnityCG.cginc" structappdata { float4vertex:POSITION; float2uv:TEXCOORD0; }; structv2f { float2uv:TEXCOORD0; float4vertex:SV_POSITION; }; sampler2D_MainTex; float4_MainTex_ST; sampler2D_MainTex2; float4_MainTex2_ST; float_StartFlag; float_Column; float_SpeedFactor; float_StartTime; v2fvert(appdatav) { v2fo; o.vertex=UnityObjectToClipPos(v.vertex); o.uv=TRANSFORM_TEX(v.uv,_MainTex); returno; } fixed4frag(v2fi):SV_Target { fixed4col=0; //_StartFlag通过C#监听键盘事件,设置为1,作为开始动画的标记 //step(a,b)=>if(b>=a)return1elsereturn0 //i.uv.x%(1/_Column)i.uv.x范围是0-1,分成_Column份每份(1/_Column) fixedresult=_StartFlag*step(i.uv.x%(1/_Column),(_Time.y-_StartTime)*_SpeedFactor); if(result==0) { col=tex2D(_MainTex,i.uv); } else { col=tex2D(_MainTex2,i.uv); } returncol; } ENDCG } } }
C#控制开关,点击键盘任意按键。挂到panel上
usingSystem.Collections; usingSystem.Collections.Generic; usingUnityEngine; publicclassbaiyechuang:MonoBehaviour{ //Usethisforinitialization Materialmat; MeshRenderermeshRen; voidStart(){ meshRen=this.GetComponent(); print(meshRen); mat=meshRen.material; print(mat); } voidOnGUI(){ if(Input.anyKeyDown) { Evente=Event.current; if(e.isMouse){ Debug.Log(e.button); } if(e.isKey) { if(e.keyCode==KeyCode.None) return; Debug.Log(e.keyCode); mat.SetFloat("_StartTime",Time.timeSinceLevelLoad); mat.SetFloat("_StartFlag",1); } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。