博客
关于我
UGUIImage透明渐变
阅读量:95 次
发布时间:2019-02-26

本文共 2863 字,大约阅读时间需要 9 分钟。

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'//参考https://blog.csdn.net/qq_34537249/article/details/78264955Shader "Unlit/ImageAlpha"{	Properties	{		[PerRendererData]_MainTex ("Texture", 2D) = "white" {}		_AlphaLX("RangeAlphaLX",Float) = 0		_AlphaRX("RangeAlphaRX",Float) = 1		_AlphaTY("RangeAlphaTY",Float) = 1		_AlphaBY("RangeAlphaBY",Float) = 0		_AlphaPower("Power",Float) = 0 //透明度变化范围	}	SubShader	{		Tags { "RenderType"="Transparent" }		Blend SrcAlpha OneMinusSrcAlpha		Cull Back		Pass		{			CGPROGRAM			#pragma vertex vert			#pragma fragment frag						#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;			float _AlphaPower;			sampler2D _AlphaTex;			float _AlphaLX;			float _AlphaRX;			float _AlphaTY;			float _AlphaBY;			v2f vert (appdata v)			{				v2f o;				o.vertex = UnityObjectToClipPos(v.vertex);				o.uv = TRANSFORM_TEX(v.uv, _MainTex);				return o;			}			//此方法取自Unity默认Sprite的Shader			fixed4 SampleSpriteTexture (float2 uv)			{				fixed4 color = tex2D (_MainTex, uv);#if ETC1_EXTERNAL_ALPHA				// get the color from an external texture (usecase: Alpha support for ETC1 on android)				color.a = tex2D (_AlphaTex, uv).r;#endif //ETC1_EXTERNAL_ALPHA				return color;			}			fixed4 frag (v2f i) : SV_Target			{				// sample the texture				fixed4 col = SampleSpriteTexture(i.uv);				//利用透明度阈值和uv坐标的差来计算透明的程度和是否控制其半透				//四个方向只是对坐标的取值和正反方向不同,原理一致				fixed alphalx = col.a * lerp(1,_AlphaPower,(_AlphaLX-i.uv.x));				col.a = saturate(lerp(alphalx,col.a,step(_AlphaLX,i.uv.x)));				fixed alpharx = col.a * lerp(1,_AlphaPower,(i.uv.x-_AlphaRX));				col.a = saturate(lerp(col.a,alpharx,step(_AlphaRX,i.uv.x)));				fixed alphaby = col.a * lerp(1,_AlphaPower,(_AlphaBY-i.uv.y));				col.a = saturate(lerp(alphaby,col.a,step(_AlphaBY,i.uv.y)));				fixed alphaty = col.a * lerp(1,_AlphaPower,(i.uv.y-_AlphaTY));				col.a = saturate(lerp(col.a,alphaty,step(_AlphaTY,i.uv.y)));				return col;			}			ENDCG		}	}}

初始_AlphaLX("RangeAlphaLX",Float) = 0

        _AlphaRX("RangeAlphaRX",Float) = 1
        _AlphaTY("RangeAlphaTY",Float) = 1
        _AlphaBY("RangeAlphaBY",Float) = 0

修改_AlphaTY可以达到从上到下逐渐渐变 其他也是如此需要

接着跟代码  位0置挂上钩

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class NewBehaviourScript : MonoBehaviour{    public float A = 0;    public Material _Material;    // Start is called before the first frame update    void Start()    {        _Material = GetComponent().material;    }    // Update is called once per frame    void Update()    {        //关联坐标  进行透明渐变        if (transform.localPosition.y > 0)        {            _Material.SetFloat("_AlphaRX", (50 - transform.localPosition.y)/50);        }            }}

 

 

你可能感兴趣的文章
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>