7.自定义材质面板属性的特性

7.自定义材质面板-属性的特性


7.1 知识点

什么是属性的特性

所谓的属性的特性,就是在属性前加上一些类似特性的限制,让属性在 Inspector 窗口中以受限或特殊的布局方式显示。

常用的限制特性

  • [HideInInspector]
    可以添加到任意属性前,使该属性在材质面板上隐藏。

  • [NoScaleOffset]
    添加到 2D 纹理贴图属性前,可以让其在材质面板上隐藏纹理的 Tiling 和 Offset 选项。

  • [Normal]
    添加到 2D 纹理贴图属性前,可以检测关联的纹理贴图是否为法线贴图;如果不是法线贴图,会弹出修复提示。

  • [HDR]
    添加到 2D 纹理贴图或者颜色属性前,可以使属性开启高动态范围(HDR)效果,从而突破数值 1 的限制,常用于自发光属性。

创建 Shader,添加使用限制特性的属性

Shader "Unlit/Lesson07"
{
    Properties
    {
        // 隐藏在 Inspector 面板中
        [HideInInspector]_MainTex1 ("Texture1", 2D) = "white" {}
        
        // [NoScaleOffset] 表示不显示缩放和偏移
        [NoScaleOffset]_MainTex2 ("Texture2", 2D) = "white" {}
        
        // [Normal] 表示检测关联的纹理贴图是否为法线贴图
        [Normal]_MainTex3 ("Texture3", 2D) = "white" {}
        
        [HDR]_Color1("Color1", Color) = (1,1,1,1)
        
//        [Header(Picture Info)]_MainTex ("Texture", 2D) = "white" {}
//
//        [Header(Color Info)][Space(60)][HDR]_Color("Color", Color) = (1,1,1,1)
    }
    SubShader
    {
        //...
    }
}

查看效果

在 Inspector 窗口中可以看到这些限制特性的效果。

常用的装饰性特性

  • [Space] 或 [Space(数值)]
    可以在某一个属性前添加一个空白行;如果填入数值,则添加对应行数的空白。

  • [Header(文本标题)]
    可以在材质属性面板上添加标题文字,起到装饰作用。

添加装饰性特性

Properties
{
    // 隐藏在 Inspector 面板中
    [HideInInspector]_MainTex1 ("Texture1", 2D) = "white" {}
    
    // [NoScaleOffset] 表示不显示缩放和偏移
    [NoScaleOffset]_MainTex2 ("Texture2", 2D) = "white" {}
    
    // [Normal] 表示检测关联的纹理贴图是否为法线贴图
    [Normal]_MainTex3 ("Texture3", 2D) = "white" {}
    
    [HDR]_Color1("Color1", Color) = (1,1,1,1)
    
    [Space(100)][Header(Tao Picture Info)]_MainTex ("Texture", 2D) = "white" {}
    
    [Header(Tao Color Info)][Space(60)][HDR]_Color("Color", Color) = (1,1,1,1)
}

查看效果

在 Inspector 中可以看到添加的空行以及文本标题的效果。


7.2 知识点代码

Lesson07.shader

Shader "Unlit/Lesson07"
{
    Properties
    {
        //隐藏在Inspector面板中
        [HideInInspector]_MainTex1 ("Texture1", 2D) = "white" {}
        
        // [NoScaleOffset]表示不显示缩放和偏移
        [NoScaleOffset]_MainTex2 ("Texture2", 2D) = "white" {}
        
        // [Normal]表示检测关联的纹理贴图是否为法线贴图
        [Normal]_MainTex3 ("Texture3", 2D) = "white" {}
        
        [HDR]_Color1("Color1", Color) = (1,1,1,1)
        
        [Space(100)][Header(Tao Picture Info)]_MainTex ("Texture", 2D) = "white" {}

        [Header(Tao Color Info)][Space(60)][HDR]_Color("Color", Color) = (1,1,1,1)
    }
    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;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;

            v2f vert(appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                UNITY_TRANSFER_FOG(o, o.vertex);
                return o;
            }

            fixed4 frag(v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                // apply fog
                UNITY_APPLY_FOG(i.fogCoord, col);
                return col;
            }
            ENDCG
        }
    }
}

Lesson07_自定义材质面板_属性的特性.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson07_自定义材质面板_属性的特性 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 什么是属性的特性

        //所谓的属性的特性
        //就是在属性前加上一些类似特性的限制
        //让属性在Inspector窗口中进行 有限制的显示 或者 特殊的布局显示

        #endregion

        #region 知识点二 常用的限制特性

        //[HideInInspector]
        //可以添加到 任意 属性前,是属性在材质面板上隐藏

        //[NoScaleOffset]
        //添加到 2D纹理贴图 属性前,可以让其在材质面板上隐藏纹理Tiling和Offset选项

        //[Normal]
        //添加到 2D纹理贴图 属性前,可以检测关联的纹理贴图是否为法线贴图,如果不是法线,会弹出修复提示

        //[HDR]
        //添加到 2D纹理贴图 或者 颜色 属性前,可以时属性开启高动态范围(HDR)效果,使数值突破1的限制
        //常用与自发光属性

        #endregion

        #region 知识点三 常用的装饰性特性

        //[Space] 或 [Space(数值)]
        //可以在某一个属性前添加一个空白行
        //如果填入数值,可以添加对应行数的空白行

        //[Header(文本标题)]
        //可以在材质属性面板上添加标题文字

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏