Unity3D之Shader自定义编辑器功能拓展
生活随笔
收集整理的這篇文章主要介紹了
Unity3D之Shader自定义编辑器功能拓展
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、前言
最近在開發(fā)一個關卡類的游戲,在導入一些3D物體的時候,發(fā)現(xiàn)很多時候同一個3D物體需要渲染的方式不一樣,比如這顆樹要雙面渲染(Cull Off),但在很多情況下是可以剔除背面(Cull Back)的,之前在寫Shader方面找不到什么好方法直接控制,干脆就寫了兩個Shader,這就造成了無謂的浪費跟資源管理的麻煩了,我們是可以更加方便地控制Shader的某些屬性的。
二、正文 先看看我們最終的效果圖:
這里我只是列了一部分的屬性作為例子進行介紹,大家當然是可以拓展到想要控制的另外屬性上面的。貼上我們需要的shader代碼:
? 好了,讓我們來分析一下具體代碼的作用。 1、下拉框:
這一句簡單來說就是定義了一個Float類型名字為_CullMode的變量。 [Space(10)] : 這個是指在面板上留10單位的空間展示此屬性。 [Enum(CullMode)] : 這里就表明了這個變量是屬于CullMode的枚舉變量,在最后的默認值為0,就是CullMode.Off這個值。我們就可以根據(jù)這個枚舉來進行渲染剔除類型的控制。而對應的代碼是:。然后如果我們打算用腳本去控制這個值,可以這樣做:
特別要注意的是,有時候我們雖然定義了,發(fā)現(xiàn)所可以選擇的枚舉值并不是我們想要的,那就很可能是有同名的系統(tǒng)枚舉類型了,所以我們很多時候都盡量定義全枚舉變量的引用,像這樣子做:
2、自定義的枚舉下拉框 那我們是否可以使用自定義的枚舉類型呢?以下就是例子
這樣我們就定義了包含了{Original,Black,White}的枚舉類型了,然后我們還有在CG語言里面定義相關聯(lián)的關鍵字,它的形式是“變量名”+“_”+“枚舉變量名”:
當我們要使用這幾個關鍵字的時候,就是這樣的:
這里的代碼都是為了簡單舉例進行展示使用方式而已。同時,我們可以用腳本去控制宏,這個跟之前的系統(tǒng)定義的枚舉變量控制是不一樣的:
因為在定義這些自定義的枚舉的時候,已經生成了Shader內部的一個對應的關鍵字了,所以我們必須要用EnableKeyWord/DisableKeyWord的方式去啟用或者關閉。 3、選擇框 當我們需要定義一個布爾型的屬性的時候,我們也是可以用Float去替代的:
所使用的方式是:
而平時的常規(guī)寫法是這樣的:
但我們定義了這個[Toggle]之后,就可以得到一個“變量名”+“_ON”的關鍵字可以使用了。同樣地,我們用腳本控制的時候也是一樣的方式:
4、滑動條 而當我們需要去控制一個值在一個范圍內的時候,我們可以使用滑動條的定義:
其實如果你不用前面的定義也是可以的,只要用Range這個定義就可以了,而腳本控制的方式也是跟SetFloat的方法是一樣的。 5、隱藏顯示變量 有時候定義太多東西到面板上反而會造成策劃或者別的人看的時候迷糊,所以有些定義的變量,我們不想它顯示在面板的時候,可以這樣子做:
但其實[HideInInspector]這個變量屬性也可以用在腳本上定義的,這里就不詳說了。這里先寫這些了,有什么意見或者建議都可以在下面留言,謝謝大家。 后續(xù):如果大家對這些功能還不滿足的話,還可以自己寫編輯器,只要繼承“ShaderGUI”這個類就好了,具體大家可以在這里查看:http://docs.unity3d.com/ScriptReference/ShaderGUI.html,如果有需要,我也可以繼續(xù)寫這個類詳細的擴展。
二、正文 先看看我們最終的效果圖:
這里我只是列了一部分的屬性作為例子進行介紹,大家當然是可以拓展到想要控制的另外屬性上面的。貼上我們需要的shader代碼:
? 好了,讓我們來分析一下具體代碼的作用。 1、下拉框:
這一句簡單來說就是定義了一個Float類型名字為_CullMode的變量。 [Space(10)] : 這個是指在面板上留10單位的空間展示此屬性。 [Enum(CullMode)] : 這里就表明了這個變量是屬于CullMode的枚舉變量,在最后的默認值為0,就是CullMode.Off這個值。我們就可以根據(jù)這個枚舉來進行渲染剔除類型的控制。而對應的代碼是:。然后如果我們打算用腳本去控制這個值,可以這樣做:
特別要注意的是,有時候我們雖然定義了,發(fā)現(xiàn)所可以選擇的枚舉值并不是我們想要的,那就很可能是有同名的系統(tǒng)枚舉類型了,所以我們很多時候都盡量定義全枚舉變量的引用,像這樣子做:
2、自定義的枚舉下拉框 那我們是否可以使用自定義的枚舉類型呢?以下就是例子
這樣我們就定義了包含了{Original,Black,White}的枚舉類型了,然后我們還有在CG語言里面定義相關聯(lián)的關鍵字,它的形式是“變量名”+“_”+“枚舉變量名”:
當我們要使用這幾個關鍵字的時候,就是這樣的:
這里的代碼都是為了簡單舉例進行展示使用方式而已。同時,我們可以用腳本去控制宏,這個跟之前的系統(tǒng)定義的枚舉變量控制是不一樣的:
因為在定義這些自定義的枚舉的時候,已經生成了Shader內部的一個對應的關鍵字了,所以我們必須要用EnableKeyWord/DisableKeyWord的方式去啟用或者關閉。 3、選擇框 當我們需要定義一個布爾型的屬性的時候,我們也是可以用Float去替代的:
所使用的方式是:
而平時的常規(guī)寫法是這樣的:
但我們定義了這個[Toggle]之后,就可以得到一個“變量名”+“_ON”的關鍵字可以使用了。同樣地,我們用腳本控制的時候也是一樣的方式:
4、滑動條 而當我們需要去控制一個值在一個范圍內的時候,我們可以使用滑動條的定義:
其實如果你不用前面的定義也是可以的,只要用Range這個定義就可以了,而腳本控制的方式也是跟SetFloat的方法是一樣的。 5、隱藏顯示變量 有時候定義太多東西到面板上反而會造成策劃或者別的人看的時候迷糊,所以有些定義的變量,我們不想它顯示在面板的時候,可以這樣子做:
但其實[HideInInspector]這個變量屬性也可以用在腳本上定義的,這里就不詳說了。這里先寫這些了,有什么意見或者建議都可以在下面留言,謝謝大家。 后續(xù):如果大家對這些功能還不滿足的話,還可以自己寫編輯器,只要繼承“ShaderGUI”這個類就好了,具體大家可以在這里查看:http://docs.unity3d.com/ScriptReference/ShaderGUI.html,如果有需要,我也可以繼續(xù)寫這個類詳細的擴展。
總結
以上是生活随笔為你收集整理的Unity3D之Shader自定义编辑器功能拓展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兴业银行信用卡制卡中怎么查额度?90%的
- 下一篇: 光大中青旅信用卡年费多少?可以免年费吗?