Unity中 UI Shader的基本功能

文章目录

  • 前言
  • 一、实现思路
    • 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 OneMinusSrcAlpha
        Pass
        {
            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
        }
    }
}

属性设置:
Unity中 UI Shader的基本功能_第1张图片

效果:
Unity中 UI Shader的基本功能_第2张图片

你可能感兴趣的:(Unity,unity,ui,游戏引擎)