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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。