大家好!經(jīng)常會(huì)有同學(xué)問(wèn)“Unity怎么預(yù)定義UI?”今天給大家?guī)?lái)不寫GUIEditor就能實(shí)現(xiàn)的預(yù)定義UI。
1、寫在前面
出于性能原因,EditorGUILayout 函數(shù)不能與 MaterialPropertyDrawers 一起使用。
2、Enum類(枚舉)
枚舉,最多可指定 7 個(gè)名稱。
常用的枚舉類如下。當(dāng)然也可以自定義枚舉,可以通過(guò)KeyWrod來(lái)控制。
混合模式
[Enum(UnityEngine.Rendering.BlendOp)] _BlendOp ("BlendOp", Float) = 0[Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("SrcBlend", Float) = 1[Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("DstBlend", Float) = 0
深度開(kāi)關(guān)
[Enum(Off, 0, On, 1)]_ZWriteMode ("ZWriteMode", float) = 1ZWriteMode是沒(méi)有內(nèi)置的,實(shí)際上也只有on和off兩個(gè)狀態(tài),所以用Toogle其實(shí)也可以,我這里是直接用[Enum(Off, 0, On, 1)]這樣的寫法聲明了個(gè)新的自定義Enum
剔除模式
[Enum(UnityEngine.Rendering.CullMode)]_CullMode ("CullMode", float) = 2
深度測(cè)試
[Enum(UnityEngine.Rendering.CompareFunction)]_ZTestMode ("ZTestMode", Float) = 4
顏色通道寫入遮罩
[Enum(UnityEngine.Rendering.ColorWriteMask)]_ColorMask ("ColorMask", Float) = 15[Enum(UnityEngine.Rendering.CompareFunction)]_StencilComp ("Stencil Comparison", Float) = 8[Enum(UnityEngine.Rendering.StencilOp)]_StencilPass ("Stencil Pass", Float) = 0[Enum(UnityEngine.Rendering.StencilOp)]_StencilFail ("Stencil Fail", Float) = 0[Enum(UnityEngine.Rendering.StencilOp)]_StencilZFail ("Stencil ZFail", Float) = 0
3、IntRange
顯示一個(gè)適用于 Range 著色器屬性的整數(shù)滑動(dòng)條。[IntRange]_StencilWriteMask ("Stencil Write Mask", Range(0,255)) = 255[IntRange]_StencilReadMask ("Stencil Read Mask", Range(0,255)) = 255[IntRange]_Stencil ("Stencil ID", Range(0,255)) = 0
4、Header
顯示一個(gè)頭部名稱。
[Header()]
[Header(A group of things)] _Prop1 ("Prop1", Float) = 0
不支持漢字,數(shù)字以及大部分符號(hào)在著色器屬性之前創(chuàng)建一個(gè)標(biāo)題文本。
5、Space
在著色器屬性之前創(chuàng)建垂直空間。
[Space] _Prop1 ("Prop1", Float) = 0[Space(50)] _Prop2 ("Prop2", Float) = 0
6、KeywordEnum
關(guān)鍵字枚舉,并啟用相應(yīng)的著色器關(guān)鍵字。它可在著色器中與“#pragma multi_compile”配合使用,以啟用或禁用部分著色器代碼。每個(gè)名稱都將 采用“屬性名”+ 下劃線 +“枚舉名”這種形式的大寫著色器關(guān)鍵字。最多可提供 9 個(gè)名稱。
[KeywordEnum(None, Add, Multiply)] _Overlay ("Overlay mode", Float) = 0#pragma multi_compile _OVERLAY_NONE _OVERLAY_ADD _OVERLAY_MULTIPLY
7、Toggle類(開(kāi)關(guān))
以開(kāi)關(guān)形式顯示浮點(diǎn)值。屬性值為 0 或 1,具體取決于開(kāi)關(guān)狀態(tài)。當(dāng)開(kāi)關(guān)處于打開(kāi)狀態(tài)時(shí),將設(shè)置一個(gè)帶有大寫屬性名稱 +“_ON” 的著色器關(guān)鍵字,或者一個(gè)顯式指定的著色器關(guān)鍵字。[Toggle] _Invert ("Invert?", Float) = 0[Toggle(ENABLE_FANCY)] _Fancy ("Fancy?", Float) = 0
8、PowerSlider
[PowerSlider(3.0)] _Shininess ("Shininess", Range (0.01, 1)) = 0.08顯示一個(gè)具有對(duì)應(yīng)于 Range 著色器屬性的非線性響應(yīng)的滑動(dòng)條。意思就是,讓Range滑桿更加方便調(diào)整細(xì)微的值。以[PowerSlider(1.0)]為分界,當(dāng)值為1.0時(shí),效果與range一致。當(dāng)值<1.0時(shí),值越大可調(diào)整的范圍越大。當(dāng)值>1.0時(shí),值越小可調(diào)整的范圍越大??梢愿?xì)地在這些區(qū)間進(jìn)行微調(diào)。
當(dāng)值為0.1時(shí):
當(dāng)值為10時(shí):
PowerSlider值類似曲線的控制值,值越大,小值的范圍越好調(diào)整,值越小,大值的可調(diào)整范圍越大。
更多關(guān)于“Unity培訓(xùn)”的問(wèn)題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴(yán)謹(jǐn),每年培養(yǎng)泛IT人才近2萬(wàn)人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時(shí)歡迎你來(lái)試聽(tīng)。