這篇文章主要為大家展示了“Unity中的 Shader渲染模式有幾種”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Unity中的 Shader渲染模式有幾種”這篇文章吧。
創(chuàng)新互聯(lián)是一家專業(yè)提供海鹽企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為海鹽眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
Unity 中的 Shader 有四種渲染模式,分別是:
——Opaque(不透明)
——Cutout(鏤空)
——Fade(隱現(xiàn))
——Transparent(透明)
之前我遇到一個(gè)需求,需要給特定的游戲物體添加一個(gè)冰凍的效果,但是給我的 Shader
是一個(gè)完全冰凍的 Shader,而且無(wú)法通過(guò)參數(shù)調(diào)整它的顏色值。之后我的同事告訴我可
以通過(guò)修改渲染模式更改物體本身的Alpha值實(shí)現(xiàn),所以第一步我尋找了網(wǎng)上關(guān)于修改運(yùn)
行時(shí) Shader 渲染模式的代碼,如下。
http://www.voidcn.com/article...
然后就是簡(jiǎn)單的代碼操作,如下。
//獲取目標(biāo)身上的渲染組件
var renderer = GetComponentsInChildren();
// 建立一個(gè)冰凍數(shù)組 第二個(gè)數(shù)組元素是事先找好的冰凍特效
Material[] frostMatetials = new Material[2] { renderer.material,
frostEffect };
//添加冰凍特效到人物身上的數(shù)組中
renderer.materials = frostMatetials;
//實(shí)例化一個(gè)渲染模式變量
var fadeMode = SetMaterialRenderingMode.RenderingMode.Fade;
//根據(jù)網(wǎng)上的方法更改你的 Shader 渲染模式為 Fade
SetMaterialRenderingMode.SetMaterialRenderingModeMethod(
renderer.materials[0],fadeMode);
由于 Color 的 Alpha 值是只讀的不能修改,但是 Color 是可以修改的,所以要獲取目標(biāo)
物體 Color 的 RGB 值,然后實(shí)例一個(gè) Color 用構(gòu)造函數(shù)更改為你想要的 Alpha 值。如下:
Color currentcolor03 = new Color
{
a = 0.8f,
r = renderer.materials[0].color.r,
g = renderer.materials[0].color.g,
b = renderer.materials[0].color.b
};
//替換目標(biāo) Color 屬性就可以實(shí)現(xiàn)了
其實(shí)這個(gè)方法不是很好,主要是因?yàn)樗o的 Shader 不能修改屬性值,后來(lái)我拿到了可以更改
屬性值的Shader,事情就變得簡(jiǎn)單了許多。
這是我拿到的材料,可以通過(guò)材料找到材料中包含的 Shader,里面可以看到每個(gè)值所對(duì)應(yīng)的參數(shù)。
這樣的話修改就只需要通過(guò)調(diào)用方法 Material.SetFloat(); 及其類似方法,括號(hào)里面是兩個(gè)
參數(shù)一個(gè)是 String 類型的參數(shù),表示通過(guò) String 獲取想要改變的參數(shù),第二個(gè)是更改的值。
這期間我遇到一個(gè)問(wèn)題,最后找了很久發(fā)現(xiàn)是編譯器的問(wèn)題,我在用第一種方法的時(shí)候,如果正常
情況下可以修改渲染模式,并且我用了三個(gè) Color 來(lái)依次替換實(shí)現(xiàn)了漸變效果,但是如果我在
Hierarchy 面板中選中這個(gè)物體那么正在改變的物體就會(huì)突然變回更改之前的默認(rèn)狀態(tài),或者如
果你預(yù)先選中了這個(gè)將要更改的物體他也會(huì)出現(xiàn)同樣的效果,就是不能在編譯狀態(tài)下選中這個(gè)游
戲物體,不能在 Inspector 面板中查看他的渲染狀態(tài),最后我得出了一個(gè)運(yùn)行時(shí)渲染的詞語(yǔ)來(lái)
描述這個(gè)行為,
如果你在運(yùn)行時(shí)更改了游戲物體 Shader 的渲染模式,那么查看他的渲染模式會(huì)導(dǎo)致他的渲染模
式屬性重置。
以上是“Unity中的 Shader渲染模式有幾種”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!