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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity在运行时(代码中)设置材质的渲染模式(RenderingMode)

發布時間:2024/8/23 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity在运行时(代码中)设置材质的渲染模式(RenderingMode) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Unity中,有些少數情況下我們需要用代碼來創建材質。比如說在材質非常多,而僅僅是紋理不一樣的時候。

而用代碼創建的材質是沒有對應的資源文件的,我們也就無法使用Inspector來設置它的Rendering Mode。

?

關于Rendering Mode,許我稍作介紹:

材質(Material)的屬性檢視面板(Inspector)里的第一項為渲染模式(RenderingMode)

渲染模式總共有四種:

渲染模式

意思

適用對象舉例

說明

Opaque

不透明

石頭

適用于所有的不透明的物體

Cutout

鏤空

破布

透明度不是0%就是100%,不存在半透明的區域。

Fade

隱現

物體隱去

Transparent的區別為高光反射會隨著透明度而消失。

Transparent

透明

玻璃

適用于像彩色玻璃一樣的半透明物體,高光反射不會隨透明而消失。

?

有時候我們需要在程序代碼(Script)中設置材質的渲染模式,這時候我們該怎么做呢?這時候可以通過添加以下代碼來實現。

public enum RenderingMode {Opaque,Cutout,Fade,Transparent, }public static void SetMaterialRenderingMode (Material material, RenderingMode renderingMode) {switch (renderingMode) {case RenderingMode.Opaque:material.SetInt ("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);material.SetInt ("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);material.SetInt ("_ZWrite", 1);material.DisableKeyword ("_ALPHATEST_ON");material.DisableKeyword ("_ALPHABLEND_ON");material.DisableKeyword ("_ALPHAPREMULTIPLY_ON");material.renderQueue = -1;break;case RenderingMode.Cutout:material.SetInt ("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);material.SetInt ("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);material.SetInt ("_ZWrite", 1);material.EnableKeyword ("_ALPHATEST_ON");material.DisableKeyword ("_ALPHABLEND_ON");material.DisableKeyword ("_ALPHAPREMULTIPLY_ON");material.renderQueue = 2450;break;case RenderingMode.Fade:material.SetInt ("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);material.SetInt ("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);material.SetInt ("_ZWrite", 0);material.DisableKeyword ("_ALPHATEST_ON");material.EnableKeyword ("_ALPHABLEND_ON");material.DisableKeyword ("_ALPHAPREMULTIPLY_ON");material.renderQueue = 3000;break;case RenderingMode.Transparent:material.SetInt ("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);material.SetInt ("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);material.SetInt ("_ZWrite", 0);material.DisableKeyword ("_ALPHATEST_ON");material.DisableKeyword ("_ALPHABLEND_ON");material.EnableKeyword ("_ALPHAPREMULTIPLY_ON");material.renderQueue = 3000;break;} }

使用方法:

void Start () {// 設置材質的顏色為半透明的顏色才能看到效果,如果材質有貼圖,那么貼圖也必須是半透明的GetComponent<MeshRenderer> ().material.color = new Color (1, 0, 0, 0.5f);SetMaterialRenderingMode (GetComponent<MeshRenderer> ().material, RenderingMode.Transparent); }

注意:測試前先在目標物體后放置一個其他物體,如果未添加代碼前不可以看到后面物體,而添加之后可以了,那么就表示此代碼設置RenderingMode成功。

成功和不成功的結果是這樣的:

End

http://www.rainier.net.cn/cpys/xnfzsyl/lxl/20160331175407

總結

以上是生活随笔為你收集整理的Unity在运行时(代码中)设置材质的渲染模式(RenderingMode)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。