溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

UnityShader實現百葉窗效果

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

本文實例為大家分享了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" }
 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#監聽鍵盤事件,設置為1,作為開始動畫的標記
 //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#控制開關,點擊鍵盤任意按鍵。掛到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);
  }
 }
 }
 
 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女