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)相关推荐
- 【Unity】 Unity设置材质的渲染模式(RenderingMode)
在Unity中,有些少数情况下我们需要用代码来创建材质.比如说在材质非常多,而仅仅是纹理不一样的时候. 而用代码创建的材质是没有对应的资源文件的,我们也就无法使用Inspector来设置它的Rende ...
- [Unity脚本运行时更新]C#7新特性
洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第5篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...
- [Unity脚本运行时更新]C#6新特性
洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第4篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...
- Unity脚本运行时更新带来了什么?
洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第一篇,后续会结合Unity实例介绍C# 4 - C# 6都带来了具体哪些变化 ...
- Unity项目运行时动态更新光照贴图 | LightMap
Unity项目运行时动态更新烘培的光照贴图 动态更新烘培的光照贴图 场景的物件没有发生变化(也就是说没有运行时加载在场景上的Prefab) 场景的烘培贴图已经更新,但是有些物件prefab想运行时加载 ...
- [Unity脚本运行时更新]C#7.3新特性
洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第8篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...
- [Unity脚本运行时更新]C#7.2新特性
洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第7篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...
- [Unity脚本运行时更新]C#7.1新特性
洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第6篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...
- [Unity脚本运行时更新]C#5新特性
洪流学堂,让你快人几步!本文首发于洪流学堂微信公众号. 本文是该系列<Unity脚本运行时更新带来了什么?>的第3篇. 洪流学堂公众号回复runtime,获取本系列所有文章. Unity2 ...
最新文章
- 云服务器_整体服务器与微服务
- torch.nn.functional.pad(input, pad, mode=‘constant‘, value=0)
- python字典进行大写转化_python之字典的增删改查
- RS-232转RS-485/422串口转换器产品介绍
- [译]机器人操作系统简介:终极机器人应用框架(上)
- 中国最大字幕组“人人影视”凉了!警方通报:因盗版视频14人被抓
- maven mirror 优先级
- C++编写Windows服务程序
- jQuery EasyUI 简介
- [模板] 线筛欧拉函数
- excel 绘制突显的饼图
- android端好用的gif生成器,gif字幕生成器
- eclipse的安装与环境配置
- 用循环制作乘法口诀表
- html会员积分模板,人人商城会员中心头部模板显隐会员积分等项 - YangJunwei
- CC00229.CloudKubernetes——|KuberNetes细粒度权限控制.V13|——|Ratel.v01|k8s资源管理平台部署|
- 电力设备事故演练仿真培训_电力事故VR培训_广州华锐互动
- 云计算应该怎么学,学习路线是什么?
- android获得键盘高度,Android 获取键盘高度,显示键盘和隐藏键盘
- C++ 博客专栏汇总 面试学习用 非突击问答式
热门文章
- 电脑远程凭证不工作:解决
- linux关机_Linux中shutdown,halt,poweroff,init 0区别
- 我的世界linux开服权限不足,我的世界路由器开服怎么获得超级管理员权限
- python螺旋圆的绘制_python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)...
- idea 保存设置 新建项目_配置、创建IntelliJ IDEA Spring MVC 项目
- python类继承返回值_python继承threading.Thread实现有返回值的子类实例
- python 代理服务器_Python实现HTTP代理服务器
- matlab ode45求解齿轮动力学,ode45求解多自由度动力学方程实例.doc
- u8 附件上传后存放路径_织梦DedeCms附件按月份保存的修改方法
- 当选院士!兰州大学教授斩获美国该领域最高荣誉!