Unity如何預定義UI?

2022-10-11 08:54:10 字數 2920 閱讀 2952

中如何不寫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) = 1

zwritemode是沒有內建的,實際上也只有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值類似曲線的控制值,值越大,小值的範圍越好調整,值越小,大值的可調整範圍越大。

預定義,巨集定義

巨集定義 其作用就是 換其名曰 給程式中的一段特殊的 函式,資料取了個簡單明瞭的名字。不過有一點這傢伙的作用範圍是全域性的。即使它是在某乙個函式塊中定義的。這個其實也容易理解。因為巨集定義是預定義的一種,在我們的程式之前,由預編譯器 cpp 提前編譯出來了,那個時候程式裡的結構是個啥樣子編譯器壓根就...

預定義知識

1.巨集指令 define error import undef elif if include else ifdef line endif ifndef pragma 2 define define width 80 define length width 10 define test f1,f2...

預定義知識

預定義知識 寫於2005年12月26日 1.巨集指令 define error import undef elif if include else ifdef line endif ifndef pragma 2 define define width 80 define length width ...