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