溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Unity 3D中Shader 運行時狀態(tài)及渲染模式可能遇到的問題是什么

發(fā)布時間:2020-12-02 10:03:15 來源:億速云 閱讀:420 作者:小新 欄目:編程語言

小編給大家分享一下Unity 3D中Shader 運行時狀態(tài)及渲染模式可能遇到的問題是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Unity 中的 Shader 有四種渲染模式,分別是:

——Opaque(不透明)
——Cutout(鏤空)
——Fade(隱現(xiàn))
——Transparent(透明)

之前我遇到一個需求,需要給特定的游戲物體添加一個冰凍的效果,但是給我的 Shader
是一個完全冰凍的 Shader,而且無法通過參數(shù)調(diào)整它的顏色值。之后我的同事告訴我可
以通過修改渲染模式更改物體本身的Alpha值實現(xiàn),所以第一步我尋找了網(wǎng)上關(guān)于修改運
行時 Shader 渲染模式的代碼,如下。http://www.voidcn.com/article...

然后就是簡單的代碼操作,如下。

       //獲取目標(biāo)身上的渲染組件
       var renderer = GetComponentsInChildren<Renderer>();
       // 建立一個冰凍數(shù)組 第二個數(shù)組元素是事先找好的冰凍特效
       Material[] frostMatetials = new Material[2] { renderer.material,
        frostEffect };
       //添加冰凍特效到人物身上的數(shù)組中
       renderer.materials = frostMatetials;
       //實例化一個渲染模式變量
       var fadeMode = SetMaterialRenderingMode.RenderingMode.Fade;
       //根據(jù)網(wǎng)上的方法更改你的 Shader 渲染模式為 Fade
           
      SetMaterialRenderingMode.SetMaterialRenderingModeMethod(
      renderer.materials[0],fadeMode);

由于 Color 的 Alpha 值是只讀的不能修改,但是 Color 是可以修改的,所以要獲取目標(biāo)
物體 Color 的 RGB 值,然后實例一個 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 屬性就可以實現(xiàn)了

其實這個方法不是很好,主要是因為所給的 Shader 不能修改屬性值,后來我拿到了可以更改
屬性值的Shader,事情就變得簡單了許多。

Unity 3D中Shader 運行時狀態(tài)及渲染模式可能遇到的問題是什么

這是我拿到的材料,可以通過材料找到材料中包含的 Shader,里面可以看到每個值所對應(yīng)的參數(shù)。

Unity 3D中Shader 運行時狀態(tài)及渲染模式可能遇到的問題是什么

這樣的話修改就只需要通過調(diào)用方法 Material.SetFloat(); 及其類似方法,括號里面是兩個
參數(shù)一個是 String 類型的參數(shù),表示通過 String 獲取想要改變的參數(shù),第二個是更改的值。

這期間我遇到一個問題,最后找了很久發(fā)現(xiàn)是編譯器的問題,我在用第一種方法的時候,如果正常
情況下可以修改渲染模式,并且我用了三個 Color 來依次替換實現(xiàn)了漸變效果,但是如果我在
 Hierarchy 面板中選中這個物體那么正在改變的物體就會突然變回更改之前的默認狀態(tài),或者如
 果你預(yù)先選中了這個將要更改的物體他也會出現(xiàn)同樣的效果,就是不能在編譯狀態(tài)下選中這個游
 戲物體,不能在 Inspector 面板中查看他的渲染狀態(tài),最后我得出了一個運行時渲染的詞語來
 描述這個行為,
如果你在運行時更改了游戲物體 Shader 的渲染模式,那么查看他的渲染模式會導(dǎo)致他的渲染模
式屬性重置。

以上是“Unity 3D中Shader 運行時狀態(tài)及渲染模式可能遇到的問題是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI