unity实现切换渲染模式
2016-11-02 23:06
831 查看
在Unity中,有些少数情况下我们需要用代码来创建材质。比如说在材质非常多,而仅仅是纹理不一样的时候。
而用代码创建的材质是没有对应的资源文件的,我们也就无法使用Inspector来设置它的Rendering Mode。
关于Rendering Mode,许我稍作介绍:
材质(Material)的属性检视面板(Inspector)里的第一项为渲染模式(RenderingMode)。
渲染模式总共有四种:
有时候我们需要在程序代码(Script)中设置材质的渲染模式,这时候我们该怎么做呢?这时候可以通过添加以下代码来实现。
使用方法:
注意:测试前先在目标物体后放置一个其他物体,如果未添加代码前不可以看到后面物体,而添加之后可以了,那么就表示此代码设置RenderingMode成功。
成功和不成功的结果是这样的:
原文章地址:http://www.cnblogs.com/jarvisniu/p/5504788.html
而用代码创建的材质是没有对应的资源文件的,我们也就无法使用Inspector来设置它的Rendering Mode。
关于Rendering Mode,许我稍作介绍:
材质(Material)的属性检视面板(Inspector)里的第一项为渲染模式(RenderingMode)。
渲染模式总共有四种:
渲染模式 | 意思 | 适用对象举例 | 说明 |
Opaque | 不透明 | 石头 | 适用于所有的不透明的物体 |
Cutout | 镂空 | 破布 | 透明度不是0%就是100%,不存在半透明的区域。 |
Fade | 隐现 | 物体隐去 | 与Transparent的区别为高光反射会随着透明度而消失。 |
Transparent | 透明 | 玻璃 | 适用于像彩色玻璃一样的半透明物体,高光反射不会随透明而消失。 |
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成功。
成功和不成功的结果是这样的:
原文章地址:http://www.cnblogs.com/jarvisniu/p/5504788.html
相关文章推荐
- 主备切换之State模式实现
- 使用逻辑数据PNPCE时,选择屏幕中实现单人模式和多人模式之间的切换
- unity-使用NGUI 两个Button实现左右切换功能
- 【Unity Shaders】使用Unity Render Textures实现画面特效——画面特效中的类似Photoshop的基本混合模式
- UnityEditor扩展编辑器实现从场景中渲染得到Cubemap
- 多选模式、多接口实现、屏幕切换练习
- Unity实现场景切换的方法
- Unity中实现在切换场景时控制音乐的同步播放
- Unity实现 场景切换 音乐不断
- 【Unity Shaders】使用Unity Render Textures实现画面特效——画面特效中的叠加(Overlay)混合模式
- .NET数据库编程求索之路--7.使用ADO.NET实现(工厂模式-实现多数据库切换)(1)
- 在MFC的程序中利用DXGI的ALT+ENTER无法实现切换到全屏模式的原因
- 设计模式- 使用抽象工厂实现多数据库切换实现过程
- 通过widget来实现手机响铃模式的切换
- CoreAudio实现录音播音和扬声器听筒模式的切换
- Android睡眠助手 实现情景模式的切换
- 设计模式- 使用抽象工厂实现多数据库切换实现过程
- 设计模式- 使用抽象工厂实现多数据库切换实现过程
- Android实现日夜间模式切换
- 【Unity Shaders】使用Unity Render Textures实现画面特效——画面特效中的叠加(Overlay)混合模式