溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

UnityShader實(shí)現(xiàn)百葉窗效果

發(fā)布時(shí)間:2020-09-09 04:16:31 來源:腳本之家 閱讀:189 作者:貓叔壓力大 欄目:編程語言

本文實(shí)例為大家分享了UnityShader百葉窗展示的具體代碼,供大家參考,具體內(nèi)容如下

UnityShader實(shí)現(xiàn)百葉窗效果

shader實(shí)現(xiàn)以上百葉窗效果,主要通過shader實(shí)現(xiàn)C#只是做開關(guān)控制

看到一篇文章弄的比較復(fù)雜,覺得可以都通過shader來實(shí)現(xiàn),就動(dòng)手了。

shader定義了2張texture,自己隨便找2張圖片拖進(jìn)去就行。

Shader "Unlit/NewUnlitShader"
{
 Properties
 {
 _MainTex ("Texture", 2D) = "white" {}
 _MainTex2 ("Texture2", 2D) = "white" {}
 _StartFlag("開始標(biāo)記", float) = 0
 _SpeedFactor("速度",Range(0.01,10)) = 0.1
 _StartTime("時(shí)間初始標(biāo)記,不要手動(dòng)設(shè)置",float) = 1
 _Column("百葉窗的列數(shù)",float ) = 5
 }
 SubShader
 {
 Tags { "RenderType"="Opaque" }
 LOD 100
 
 Pass
 {
 CGPROGRAM
 #pragma vertex vert
 #pragma fragment frag
 // make fog work
 #pragma multi_compile_fog
 
 #include "UnityCG.cginc"
 
 struct appdata
 {
 float4 vertex : POSITION;
 float2 uv : TEXCOORD0;
 };
 
 struct v2f
 {
 float2 uv : TEXCOORD0;
 float4 vertex : SV_POSITION;
 };
 
 sampler2D _MainTex;
 float4 _MainTex_ST;
 
 sampler2D _MainTex2;
 float4 _MainTex2_ST;
 
 float _StartFlag;
 float _Column;
 float _SpeedFactor;
 float _StartTime;
 
 v2f vert (appdata v)
 {
 v2f o;
 o.vertex = UnityObjectToClipPos(v.vertex);
 o.uv = TRANSFORM_TEX(v.uv, _MainTex);
 return o;
 }
 
 fixed4 frag (v2f i) : SV_Target
 {
 fixed4 col = 0;
 //_StartFlag 通過C#監(jiān)聽鍵盤事件,設(shè)置為1,作為開始動(dòng)畫的標(biāo)記
 //step(a,b) => if(b>=a) return 1 else return 0
 //i.uv.x % (1/_Column) i.uv.x范圍是0-1,分成_Column份 每份(1/_Column)
 fixed result = _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);
 }
 
 return col;
 }
 ENDCG
 }
 }
}

C#控制開關(guān),點(diǎn)擊鍵盤任意按鍵。掛到panel上

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class baiyechuang : MonoBehaviour {
 
 // Use this for initialization
 Material mat;
 MeshRenderer meshRen;
 void Start () {
 meshRen = this.GetComponent<MeshRenderer> ();
 print (meshRen);
 mat = meshRen.material;
 print (mat);
 }
 
 void OnGUI() {
 if (Input.anyKeyDown)
 {
  Event e = 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);
  }
 }
 }
 
 
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI