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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker 入门使用 (二)
- 下一篇: VS2013正在等待所需操作完成