无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

通過腳本訪問和修改材質(zhì)參數(shù)

2020-06-13 21:01 作者:unity_某某師_高錦錦  | 我要投稿

在檢視面板中,您所看到的所有材質(zhì)參數(shù)都可以通過腳本來訪問,這可以允許您在運行時修改材質(zhì)的行為,利用這一點您可以制作出基于材質(zhì)屬性的動畫效果。

在游戲運行過程中,您可以動態(tài)修改材質(zhì)的數(shù)值屬性、更改顏色,以及更換紋理。在這種工作中最常用到的函數(shù)有這些:

SetFuncation

完整的材質(zhì)處理函數(shù)列表可以參考?Material 類腳本參考。

有一點需要注意的是,這些函數(shù)只會設(shè)置當(dāng)前著色器能夠使用的材質(zhì)屬性。這意味著,如果著色器不使用任何紋理,或者根本沒有綁定任何著色器,則調(diào)用?SetTexture?將無效。即使稍后設(shè)置了需要紋理的著色器,也是如此。因此,建議您在設(shè)置任何屬性之前,先設(shè)置著色器。一旦完成設(shè)置后,您就可以在使用同一組紋理和屬性值的著色器之間切換,所有設(shè)定的值都會得到保留。

這些函數(shù)的作用與所有簡單著色器(如舊版著色器)以及除標(biāo)準(zhǔn)著色器以外的內(nèi)置著色器(如粒子、精靈、UI 和無光照著色器)相同。但是,對于使用標(biāo)準(zhǔn)著色器的材質(zhì),在完全修改材質(zhì)之前,您還必須了解一些其他要求。

使用標(biāo)準(zhǔn)著色器編寫腳本的特殊要求

如果要在運行時修改材質(zhì),標(biāo)準(zhǔn)著色器有一些額外的要求,因為標(biāo)準(zhǔn)著色器在幕后實際上是由許多不同著色器合為一體的著色器。

這些不同類型的著色器稱為著色器變體,可以把它考慮為所有著色器功能的組合,其中部分功能處于激活狀態(tài),其余則處于未激活狀態(tài)。

例如,如果您為材質(zhì)設(shè)置了一個法線貼圖,就會激活支持法線貼圖的著色器變體。如果隨后又設(shè)置了高度貼圖,就會激活同時支持法線貼圖和高度貼圖的著色器變體。

這是一種很好的機(jī)制,它意味著當(dāng)您使用標(biāo)準(zhǔn)著色器時,如果某個材質(zhì)中沒有使用法線貼圖,它就不會存在法線貼圖的性能開銷,因為您實際運行的著色器省略了這部分功能的代碼。這也意味著,如果您從不使用某個功能組合(例如“高度貼圖”(HeightMap) 和“發(fā)光”(Emissive) 的組合),則您的構(gòu)建版本中將完全忽略掉該變體;實際上,您通常只會用到標(biāo)準(zhǔn)著色器中極少數(shù)的可能變體。

Unity 會阻止簡單地在構(gòu)建中包含所有可能的著色器變體的行為,因為這將是一個非常大的數(shù)字,可能有數(shù)萬個!這個巨大的數(shù)字不僅因為材質(zhì)檢視面板中每種可能的功能組合方式極其繁多,還因為針對不同渲染方案(例如是否使用 HDR、光照貼圖、GI、霧效等)的每種功能組合存在多種變體。囊括所有這些可能性將導(dǎo)致加載緩慢、內(nèi)存消耗高,并增加構(gòu)建文件尺寸和構(gòu)建時間。

所以 Unity 的替代方案是:通過檢查項目中使用的材質(zhì)資源來追蹤您使用過的著色器變體。無論在項目中加入了哪些標(biāo)準(zhǔn)著色器變體,這些變體都會包含在構(gòu)建中。

這個方案在通過腳本訪問標(biāo)準(zhǔn)著色器材質(zhì)的情況下,存在兩個問題。

1.您必須為所需的標(biāo)準(zhǔn)著色器變體啟用正確的關(guān)鍵字

如果使用腳本來更改材質(zhì),而這種更改會導(dǎo)致材質(zhì)使用標(biāo)準(zhǔn)著色器的另一種不同變體,則必須使用?EnableKeyword?函數(shù)啟用該變體。如果您開始使用一個并未被材質(zhì)使用過的著色器功能,另一個額外的變體就會被啟用起來。例如將法線貼圖分配給先前沒有此貼圖的材質(zhì),或者將初始為零的發(fā)光級別設(shè)置為大于零的值。

用來啟用標(biāo)準(zhǔn)著色器功能的關(guān)鍵字如下:

KeyWord

使用上面的關(guān)鍵字足以讓您的材質(zhì)修改腳本在編輯器運行模式中起效。

但是,由于 Unity 僅通過檢查項目中使用的材質(zhì)來確定要在構(gòu)建中包含哪些變體,因此它不會包含僅在運行時通過腳本使用到的變體。

這就是說,如果您在腳本中為材質(zhì)啟用 _PARALLAXMAP 關(guān)鍵字,但是項目中未使用與該功能組合匹配的材質(zhì),則視差貼圖將無法在最終構(gòu)建中生效(即使在編輯器中看起來正常)。這是因為構(gòu)建過程將會忽略該變體,因為它看起來不是必需的。

2.您必須確保 Unity 在構(gòu)建中包含所需的著色器變體

為此,您需要確保 Unity 知道您要使用該著色器變體,具體方法就是在資源中包含至少一個該類型的材質(zhì)。該材質(zhì)必須應(yīng)用在場景中,或者也可以將其放入?Resources 文件夾,否則該材質(zhì)處于未使用狀態(tài),Unity 仍會在構(gòu)建中忽略它。

通過完成上述兩個步驟,即可在運行時使用標(biāo)準(zhǔn)著色器修改材質(zhì)。

如果您有興趣了解有關(guān)著色器變體的詳細(xì)信息以及如何構(gòu)建自己的變體,請閱讀制作多個著色器程序變體的信息。


通過腳本訪問和修改材質(zhì)參數(shù)的評論 (共 條)

分享到微博請遵守國家法律
印江| 团风县| 二连浩特市| 黄大仙区| 盐山县| 孟州市| 新源县| 元江| 广饶县| 兴宁市| 扎兰屯市| 和田县| 顺义区| 凤翔县| 克山县| 军事| 邵阳县| 如皋市| 云林县| 庄浪县| 桑植县| 托克托县| 庆城县| 陇南市| 永平县| 茶陵县| 琼中| 临泉县| 马尔康县| 紫金县| 嘉峪关市| 贵州省| 井冈山市| 曲沃县| 桓仁| 焦作市| 松江区| 葫芦岛市| 嘉兴市| 海晏县| 阿尔山市|