大家好!經常會有同學問“Unity怎么預定義UI?”今天給大家帶來不寫GUIEditor就能實現的預定義UI。
1、寫在前面
出于性能原因,EditorGUILayout 函數不能與 MaterialPropertyDrawers 一起使用。
2、Enum類(枚舉)
枚舉,最多可指定 7 個名稱。
常用的枚舉類如下。當然也可以自定義枚舉,可以通過KeyWrod來控制。
混合模式
[Enum(UnityEngine.Rendering.BlendOp)] _BlendOp ("BlendOp", Float) = 0[Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("SrcBlend", Float) = 1[Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("DstBlend", Float) = 0
深度開關
[Enum(Off, 0, On, 1)]_ZWriteMode ("ZWriteMode", float) = 1ZWriteMode是沒有內置的,實際上也只有on和off兩個狀態,所以用Toogle其實也可以,我這里是直接用[Enum(Off, 0, On, 1)]這樣的寫法聲明了個新的自定義Enum
剔除模式
[Enum(UnityEngine.Rendering.CullMode)]_CullMode ("CullMode", float) = 2
深度測試
[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
顯示一個適用于 Range 著色器屬性的整數滑動條。[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
顯示一個頭部名稱。
[Header()]
[Header(A group of things)] _Prop1 ("Prop1", Float) = 0
不支持漢字,數字以及大部分符號在著色器屬性之前創建一個標題文本。
5、Space
在著色器屬性之前創建垂直空間。
[Space] _Prop1 ("Prop1", Float) = 0[Space(50)] _Prop2 ("Prop2", Float) = 0
6、KeywordEnum
關鍵字枚舉,并啟用相應的著色器關鍵字。它可在著色器中與“#pragma multi_compile”配合使用,以啟用或禁用部分著色器代碼。每個名稱都將 采用“屬性名”+ 下劃線 +“枚舉名”這種形式的大寫著色器關鍵字。最多可提供 9 個名稱。
[KeywordEnum(None, Add, Multiply)] _Overlay ("Overlay mode", Float) = 0#pragma multi_compile _OVERLAY_NONE _OVERLAY_ADD _OVERLAY_MULTIPLY
7、Toggle類(開關)
以開關形式顯示浮點值。屬性值為 0 或 1,具體取決于開關狀態。當開關處于打開狀態時,將設置一個帶有大寫屬性名稱 +“_ON” 的著色器關鍵字,或者一個顯式指定的著色器關鍵字。[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顯示一個具有對應于 Range 著色器屬性的非線性響應的滑動條。意思就是,讓Range滑桿更加方便調整細微的值。以[PowerSlider(1.0)]為分界,當值為1.0時,效果與range一致。當值<1.0時,值越大可調整的范圍越大。當值>1.0時,值越小可調整的范圍越大。可以更精細地在這些區間進行微調。
當值為0.1時:
當值為10時:
PowerSlider值類似曲線的控制值,值越大,小值的范圍越好調整,值越小,大值的可調整范圍越大。
更多關于“Unity培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業需求,更科學更嚴謹,每年培養泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。