本文实例为大家分享了UnityShader百叶窗展示的具体代码,供大家参考,具体内容如下
材质实现以上百叶窗效果,主要通过材质实现c#只是做开关控制
看到一篇文章弄的比较复杂,觉得可以都通过材质来实现,就动手了。
材质定义了2张纹理,自己随便找2张图片拖进去就行。
材质“未点燃的/NewUnlitShader” { 属性 { _MainTex(“纹理”,2 d)=鞍咨眥} _MainTex2 (“Texture2”、2 d)=鞍咨眥} _StartFlag(“开始标记”,浮动)=0 _SpeedFactor(“速度”,范围(0.01,10))=0.1 _StartTime(“时间初始标记,不要手动设置”,浮动)=1 _Column(“百叶窗的列数”,浮动)=5 } SubShader { 标记{“RenderType”=安煌该鳌眪 LOD 100 通过 { CGPROGRAM # pragma顶点绿色 # pragma片段的破片//使雾工作 # pragma multi_compile_fog # include“UnityCG.cginc” struct appdata { float4顶点:位置; float2紫外线:TEXCOORD0; }; struct v2f { float2紫外线:TEXCOORD0; float4顶点:SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; sampler2D _MainTex2; float4 _MainTex2_ST; 浮动_StartFlag; 浮动_Column; 浮动_SpeedFactor; 浮动_StartTime; v2f绿色(appdata v) { v2f o; o。顶点=UnityObjectToClipPos (v.vertex); o。紫外线=TRANSFORM_TEX (v。紫外线、_MainTex); 返回啊; } fixed4碎片弹(v2f我):SV_Target { fixed4坳=0;//_StartFlag通过c#监听键盘事件,设置为1,作为开始动画的标记//步骤(a, b)=比;如果(b>=)返回1否则返回0//i.uv。i.uv x % (1/_Column)。x范围是0 - 1,分成_Column份每份(1/_Column)=_StartFlag *步骤(i.uv固定的结果。x % (1/_Column), (_Time。y - _StartTime) * _SpeedFactor); 如果结果==0) { 坳=tex2D (_MainTex i.uv); } 其他的 { 坳=tex2D (_MainTex2 i.uv); } 返回上校; } ENDCG } } }
c#控制开关,点击键盘任意按键。挂到面板上
使用System.Collections; 使用System.Collections.Generic; 使用UnityEngine; 公共类baiyechuang: MonoBehaviour {//用它来初始化 材料垫; MeshRenderer meshRen; 无效的Start () { meshRen=this.GetComponent(); 打印(meshRen); 垫=meshRen.material; 打印(垫); } 空白OnGUI () { 如果(Input.anyKeyDown) { 事件e=Event.current; 如果(e.isMouse) { Debug.Log (e.button); } 如果(e.isKey) { 如果(e。键码==KeyCode.None) 返回; Debug.Log (e.keyCode); mat.SetFloat (“_StartTime”, Time.timeSinceLevelLoad); mat.SetFloat (" _StartFlag ", 1); } } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。