日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3D之Shader自定义编辑器功能拓展

發(fā)布時(shí)間:2023/12/13 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity3D之Shader自定义编辑器功能拓展 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、前言   最近在開發(fā)一個(gè)關(guān)卡類的游戲,在導(dǎo)入一些3D物體的時(shí)候,發(fā)現(xiàn)很多時(shí)候同一個(gè)3D物體需要渲染的方式不一樣,比如這顆樹要雙面渲染(Cull Off),但在很多情況下是可以剔除背面(Cull Back)的,之前在寫Shader方面找不到什么好方法直接控制,干脆就寫了兩個(gè)Shader,這就造成了無謂的浪費(fèi)跟資源管理的麻煩了,我們是可以更加方便地控制Shader的某些屬性的。
二、正文   先看看我們最終的效果圖:

  這里我只是列了一部分的屬性作為例子進(jìn)行介紹,大家當(dāng)然是可以拓展到想要控制的另外屬性上面的。貼上我們需要的shader代碼:
?   好了,讓我們來分析一下具體代碼的作用。 1、下拉框:

  這一句簡單來說就是定義了一個(gè)Float類型名字為_CullMode的變量。   [Space(10)] : 這個(gè)是指在面板上留10單位的空間展示此屬性。   [Enum(CullMode)] : 這里就表明了這個(gè)變量是屬于CullMode的枚舉變量,在最后的默認(rèn)值為0,就是CullMode.Off這個(gè)值。我們就可以根據(jù)這個(gè)枚舉來進(jìn)行渲染剔除類型的控制。而對(duì)應(yīng)的代碼是:。然后如果我們打算用腳本去控制這個(gè)值,可以這樣做:

  特別要注意的是,有時(shí)候我們雖然定義了,發(fā)現(xiàn)所可以選擇的枚舉值并不是我們想要的,那就很可能是有同名的系統(tǒng)枚舉類型了,所以我們很多時(shí)候都盡量定義全枚舉變量的引用,像這樣子做:

2、自定義的枚舉下拉框   那我們是否可以使用自定義的枚舉類型呢?以下就是例子

  這樣我們就定義了包含了{(lán)Original,Black,White}的枚舉類型了,然后我們還有在CG語言里面定義相關(guān)聯(lián)的關(guān)鍵字,它的形式是“變量名”+“_”+“枚舉變量名”:

  當(dāng)我們要使用這幾個(gè)關(guān)鍵字的時(shí)候,就是這樣的:
 
  這里的代碼都是為了簡單舉例進(jìn)行展示使用方式而已。同時(shí),我們可以用腳本去控制宏,這個(gè)跟之前的系統(tǒng)定義的枚舉變量控制是不一樣的:

  因?yàn)樵诙x這些自定義的枚舉的時(shí)候,已經(jīng)生成了Shader內(nèi)部的一個(gè)對(duì)應(yīng)的關(guān)鍵字了,所以我們必須要用EnableKeyWord/DisableKeyWord的方式去啟用或者關(guān)閉。 3、選擇框   當(dāng)我們需要定義一個(gè)布爾型的屬性的時(shí)候,我們也是可以用Float去替代的:

  所使用的方式是:

  而平時(shí)的常規(guī)寫法是這樣的:
                  
  但我們定義了這個(gè)[Toggle]之后,就可以得到一個(gè)“變量名”+“_ON”的關(guān)鍵字可以使用了。同樣地,我們用腳本控制的時(shí)候也是一樣的方式:

4、滑動(dòng)條   而當(dāng)我們需要去控制一個(gè)值在一個(gè)范圍內(nèi)的時(shí)候,我們可以使用滑動(dòng)條的定義:

  其實(shí)如果你不用前面的定義也是可以的,只要用Range這個(gè)定義就可以了,而腳本控制的方式也是跟SetFloat的方法是一樣的。 5、隱藏顯示變量   有時(shí)候定義太多東西到面板上反而會(huì)造成策劃或者別的人看的時(shí)候迷糊,所以有些定義的變量,我們不想它顯示在面板的時(shí)候,可以這樣子做:

  但其實(shí)[HideInInspector]這個(gè)變量屬性也可以用在腳本上定義的,這里就不詳說了。這里先寫這些了,有什么意見或者建議都可以在下面留言,謝謝大家。   后續(xù):如果大家對(duì)這些功能還不滿足的話,還可以自己寫編輯器,只要繼承“ShaderGUI”這個(gè)類就好了,具體大家可以在這里查看:http://docs.unity3d.com/ScriptReference/ShaderGUI.html,如果有需要,我也可以繼續(xù)寫這個(gè)類詳細(xì)的擴(kuò)展。

總結(jié)

以上是生活随笔為你收集整理的Unity3D之Shader自定义编辑器功能拓展的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。