文章目录
- 前言
- 一、实现思路
- 1、暴露一个 2D 类型的属性来接受UI的纹理
- 2、设置shader的层级为TransParent半透明渲染层级,一般UI都是在这个渲染层级
- 3、更改混合模式,是 UI 使用的纹理,该透明的地方透明
- 二、代码实现
前言
Unity中 UI Shader的基本功能
一、实现思路
1、暴露一个 2D 类型的属性来接受UI的纹理
//命名要按标准来,这个属性才可以和Unity组件中的属性产生关联
//比如说,在更改 Image 的源图片时,同时更改这个
[PerRendererData]_MainTex(“MainTex”,2D) = “white”{}
2、设置shader的层级为TransParent半透明渲染层级,一般UI都是在这个渲染层级
//更改渲染队列(UI的渲染队列一般是半透明层的)
Tags {“Queue” = “TransParent”}
3、更改混合模式,是 UI 使用的纹理,该透明的地方透明
//混合模式
Blend SrcAlpha OneMinusSrcAlpha
二、代码实现
Shader"MyShader/P1_1_1"
{Properties{//命名要按标准来,这个属性才可以和Unity组件中的属性产生关联//比如说,在更改 Image 的源图片时,同时更改这个[PerRendererData]_MainTex("MainTex",2D) = "white"{}}SubShader{//更改渲染队列(UI的渲染队列一般是半透明层的)Tags {"Queue" = "TransParent"}//混合模式Blend SrcAlpha OneMinusSrcAlphaPass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"//存储 应用程序输入到顶点着色器的信息struct appdata{//顶点信息float4 vertex:POSITION;float2 uv : TEXCOORD;};//存储 顶点着色器输入到片元着色器的信息struct v2f{//裁剪空间下的位置信息float4 pos:SV_POSITION;float2 uv : TEXCOORD;};sampler2D _MainTex;v2f vert(appdata v){v2f o;//把顶点信息转化到裁剪坐标下o.pos = UnityObjectToClipPos(v.vertex);o.uv = v.uv;return o;}fixed4 frag(v2f i) : SV_Target{fixed4 mainTex = tex2D(_MainTex,i.uv);return mainTex;}ENDCG}}
}
效果: