在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成功。

成功和不成功的结果是这样的:

【Unity】 Unity设置材质的渲染模式(RenderingMode)相关推荐

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

    在Unity中,有些少数情况下我们需要用代码来创建材质.比如说在材质非常多,而仅仅是纹理不一样的时候. 而用代码创建的材质是没有对应的资源文件的,我们也就无法使用Inspector来设置它的Rende ...

  2. 【内置渲染管线】Unity标准Shader解析(渲染模式,贴图类型)

    目录 一.标准Shader之四大渲染模式 1.Opaque(不透明) 2.Cutout(镂空) 3.Fade(隐现) 4.Transparent(透明) 二.标准Shader之十种贴图类型 1.标准 ...

  3. iOS设置tabBarItem.image图片渲染模式

    2019独角兽企业重金招聘Python工程师标准>>> 设置UIImage的渲染模式: self.tabBarItem.image=[[UIImage imageNamed:imag ...

  4. 设置tabBarItem图片渲染

    在自定义tabbar的时候回遇到这样的问题: 将美工给的图片设置为tabBarItem的selectImage,美工给的图片的是这样子的:,但是设置好以后现实的图片是这样的:. 问题原因: 系统默认对 ...

  5. unity Editor下批量设置材质球中的贴图部分:

    批量设置材质球中Main Maps部分贴图包含 Albedo,Metallic,Nomap,Occlusion 脚本存放位置:放在在Editor目录之下 点击 window 之下的AddMateria ...

  6. Unity 动态循环设置材质球的图片

    动态循环设置材质球的图片: public Texture[] textures;private Renderer renderer;// Use this for initializationvoid ...

  7. 如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染技术!

    7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. Unity大中华区技术经理 ...

  8. [Unity/URP学习]风格化水体渲染(一)

    风格化水体的实现内容 文章目录 风格化水体的实现内容 风格化水体实现过程 1.水体颜色 1.1风格化水体颜色渐变 1.2水体深浅区域 1.2.1开启深度纹理 1.2.2深度纹理采样 1.3水体透明度 ...

  9. 如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染

    7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. Unity大中华区技术经理 ...

最新文章

  1. 第六届数学、计算机与生命科学交叉研究青年学者论坛 (大牛云集的生信会议,免注册费且提供午餐)...
  2. controller的frame
  3. 人脸分割 人脸解析 源码推荐
  4. 计算机无法ghost安装系统安装系统安装,品牌机、笔记本无法安装Ghost版系统原因与终极方法...
  5. awk中如何使用shell的环境变量
  6. Object C学习笔记19-枚举(转)
  7. 使用mysql事件_MySQL事件的使用详解
  8. 数据挖掘基础数学知识博客
  9. web.xml中,spring模块化加载xml方式
  10. 1002. 写出这个数 (20)-PAT乙级真题
  11. Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
  12. Go语言中的指针和new(T)函数的使用
  13. SSM面试题,2021最新Java面试题及答案
  14. 计算机基础5y浏览器,5y浏览器
  15. BlackBerry HTML5 WebWorks 平台下,让BB10应用连接上BBM
  16. 将视频截取成图片的C++代码
  17. 一个最简单的自定义锁屏应用实现
  18. 【BI工具支持的数据源对照表(帆软/PowerBI/永洪/观远)】
  19. android 没有指南针,Android指南针指向我的位置,而不是北部
  20. Linux从入门到精通——基本命令

热门文章

  1. 汽车行业信息化机遇与挑战
  2. 简述C#中IO的应用
  3. xt800远程对方计算机桌面是黑的,桌面远程对方的电脑黑屏怎么办
  4. **薛定谔名著《生命是什么》体会**
  5. 计算机科学与技术学业目标,计算机科学与技术专业本科培养目标及要求.doc
  6. 放弃文华财经,自己编程实现期货程序化交易
  7. 2020你好,2020再见
  8. c语言一个文件里重复多次定义函数,C语言里的重复定义问题的解决方案
  9. 液晶显示器c语言编程,51驱动1602液晶显示器c程序
  10. 使用Numpy创建纯色图片