在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)相关推荐

  1. 【Unity】 Unity设置材质的渲染模式(RenderingMode)

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

  2. [Unity脚本运行时更新]C#7新特性

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第5篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...

  3. [Unity脚本运行时更新]C#6新特性

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第4篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...

  4. Unity脚本运行时更新带来了什么?

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第一篇,后续会结合Unity实例介绍C# 4 - C# 6都带来了具体哪些变化 ...

  5. Unity项目运行时动态更新光照贴图 | LightMap

    Unity项目运行时动态更新烘培的光照贴图 动态更新烘培的光照贴图 场景的物件没有发生变化(也就是说没有运行时加载在场景上的Prefab) 场景的烘培贴图已经更新,但是有些物件prefab想运行时加载 ...

  6. [Unity脚本运行时更新]C#7.3新特性

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第8篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...

  7. [Unity脚本运行时更新]C#7.2新特性

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第7篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...

  8. [Unity脚本运行时更新]C#7.1新特性

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第6篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...

  9. [Unity脚本运行时更新]C#5新特性

    洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第3篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...

最新文章

  1. 云服务器_整体服务器与微服务
  2. torch.nn.functional.pad(input, pad, mode=‘constant‘, value=0)
  3. python字典进行大写转化_python之字典的增删改查
  4. RS-232转RS-485/422串口转换器产品介绍
  5. [译]机器人操作系统简介:终极机器人应用框架(上)
  6. 中国最大字幕组“人人影视”凉了!警方通报:因盗版视频14人被抓
  7. maven mirror 优先级
  8. C++编写Windows服务程序
  9. jQuery EasyUI 简介
  10. [模板] 线筛欧拉函数
  11. excel 绘制突显的饼图
  12. android端好用的gif生成器,gif字幕生成器
  13. eclipse的安装与环境配置
  14. 用循环制作乘法口诀表
  15. html会员积分模板,人人商城会员中心头部模板显隐会员积分等项 - YangJunwei
  16. CC00229.CloudKubernetes——|KuberNetes细粒度权限控制.V13|——|Ratel.v01|k8s资源管理平台部署|
  17. 电力设备事故演练仿真培训_电力事故VR培训_广州华锐互动
  18. 云计算应该怎么学,学习路线是什么?
  19. android获得键盘高度,Android 获取键盘高度,显示键盘和隐藏键盘
  20. C++ 博客专栏汇总 面试学习用 非突击问答式

热门文章

  1. 电脑远程凭证不工作:解决
  2. linux关机_Linux中shutdown,halt,poweroff,init 0区别
  3. 我的世界linux开服权限不足,我的世界路由器开服怎么获得超级管理员权限
  4. python螺旋圆的绘制_python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)...
  5. idea 保存设置 新建项目_配置、创建IntelliJ IDEA Spring MVC 项目
  6. python类继承返回值_python继承threading.Thread实现有返回值的子类实例
  7. python 代理服务器_Python实现HTTP代理服务器
  8. matlab ode45求解齿轮动力学,ode45求解多自由度动力学方程实例.doc
  9. u8 附件上传后存放路径_织梦DedeCms附件按月份保存的修改方法
  10. 当选院士!兰州大学教授斩获美国该领域最高荣誉!