UnityShader实现百叶窗效果
作者:猫叔压力大 发布时间:2023-08-22 01:01:11
标签: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);
}
}
}
}
来源:https://blog.csdn.net/Yang9325/article/details/82970974


猜你喜欢
- 1.添加依赖直接添加 hibernate-validator<dependency> &n
- C#提供了多种操作文件的方案,File类中封装的静态方法,接口封装得比较人性化,隐藏了具体实现的细节,主要包括读取、写入以及追加,这些函数如
- 企业级项目开发中都会有文件、图片、视频等文件上传并能够访问的场景,对于初学者Demo可能会直接存储在应用服务器上;对于传统项目可能会单独搭建
- 一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用import java.util.Arrays;
- 一、现象在服务器上通过curl命令调用一个Java服务的查询接口,半天没有任何响应。关于该服务的基本功能如下:1、该服务是一个后台刷新指示器
- 序列化(Serialize)是将对象转换成字节流,并将其用于存储或传输的过程,主要用途是保存对象的状态,以便在需要时重新创建该对象;反序列化
- c++回调之利用函数指针示例#include <iostream>using namespace std;/**********
- 前言这两天面试了一个物联网公司高级研发,面试题是下面这样子公司领导,部门主管,小组组长,组成员4级,假如有个 疫情预警,先通知组人员(对个人
- 呼吸按钮是我最早接触到为view添加动画效果的需求,刚刚参加安卓开发工作,要求设计一个好看的语音按钮效果,就有了这个成果,但是后来又改方案了
- 今天在云和学院学了很多,我这次只能先总结一下C#中的虚方法和抽象的运用。理论:虚方法:用virtual修饰的方法叫
- 访问者(Visitor)模式:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。访
- 本文实例为大家分享了Android实现全局悬浮框的具体代码,供大家参考,具体内容如下效果图:代码实现:Androidmanifest.xml
- 增加了用于处理MyBatis的两个bean:SqlSessionFactoryBean、MapperFactoryBean1、注册SqlSe
- 大白话讲解:从广义上 Spring 注解可以分为两类:一类注解是用于注册 Bean假如 IoC 容器是一间空屋子,首先这间空屋子啥都没有,我
- 本文实例讲述了Android检查手机网络状态及网络类型的方法。分享给大家供大家参考。具体分析如下://judge network statu
- 一、题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公
- 上一篇实现了移动端微信消息界面功能,以此为基础继续完善服务端功能服务端微信消息页实现微信消息界面的实现,和登录,注册是类似的,无非就是接受客
- 一、创建项目1.File->new->project;2.选择“Spring Initializr”,点击next;(jdk1.
- 在Android Studio 3.0中一旦我们创建了一个项目,一个名为mipmap-anydpi-v26自动创建的文件夹在res文件夹下。
- 本文的写作冲动来源于今晚看到的老赵的一则微博“大家知道System.Collections.Generic.List<T>是一种