Unity 3D物体模型的透明和不透明实现
最近在做项目中遇到一个需求,需要将物体模型进行透明虚化效果。看了网上一些博客文章。已实现该需求,为此博主写篇文章记录一下该功能的实现操作。希望能帮助到大家,不足之处还望海涵。一起学习交流。
透明效果:
使用一个方块来进行操作。
实现的脚本
该脚本挂在物体父级上,因为获取的是该对象所有子物体的MeshRenderer。(改脚本主要是获取需要透明的所有MeshRenderer然后进行更改操作)
主要操作在于这YPTools.SetMaterialRenderingMode(mrs[j],YPTools.RenderingMode.Transparent);
mrs[j].color = new Color(mrs[j].color.r, mrs[j].color.b, mrs[j].color.g, 0.1f);
public class EmptyControl : MonoBehaviour{private void Awake(){for (int i = 0; i < this.transform.childCount; i++){Transform wallTransform = this.transform.GetChild(i);MeshRenderer mr = wallTransform.GetComponent<MeshRenderer>();if (mr !=null){//MeshRenderer[] mr = wallTransform.gameObject.GetComponentsInChildren<MeshRenderer>(); Material[] mrs = mr.materials;for (int j = 0; j < mrs.Length; j++){Color mcolor = mrs[j].color;if (mcolor != null){//mcolor.a = 0.4f;mrs[j].color = new Color(65/255f,65/255f,65/255f,85/255f);//设置材质球颜色为灰色,方便透明时不那么明亮// 设置材质的颜色为半透明的颜色才能看到效果,如果材质有贴图,那么贴图也必须是半透明的YPTools.SetMaterialRenderingMode(mrs[j], YPTools.RenderingMode.Transparent);mrs[j].color = new Color(mrs[j].color.r, mrs[j].color.b, mrs[j].color.g, 0.1f);//wallTransform.gameObject.GetComponent<Renderer>().material.color = mcolor;}}} }}
}
YPTools工具类
public class YPTools : MonoBehaviour
{/// <summary>/// 设置Rendering Mode/// </summary>/// <param name="material"></param>/// <param name="renderingMode"></param>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 = 2000;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;}}}public enum RenderingMode{Opaque,Cutout,Fade,Transparent,}
RenderingMode枚举对应材质这四种类型(更改类型为Transparent设置参数为0.1f就可以实现透明效果)
不透明效果:
YPTools.SetMaterialRenderingMode(mrs[j],YPTools.RenderingMode.Transparent);
mrs[j].color = new Color(mrs[j].color.r, mrs[j].color.b, mrs[j].color.g, 0.1f);
将上面Transparent更改为Opaque 然后在设置Material 材质颜色的a值为1
YPTools.SetMaterialRenderingMode(mrs[j],YPTools.RenderingMode.Opaque);
mrs[j].color = new Color(mrs[j].color.r, mrs[j].color.b, mrs[j].color.g, 1f);
以上就是Unity对3D物体透明和不透明实现操作学习总结,也希望能帮助到大家。^ _ ^
Unity 3D物体模型的透明和不透明实现相关推荐
- [Unity]3D物体透明化方法透明材质球
Default-Skybox,Shader:Skybox/Procedural 使用透明材质 1.使用自带的天空盒材质 新建3D物体,自带是初始材质 将其替换成如上图所示的Default-Skybox ...
- [Vuforia] 详解·高通Vuforia识别追踪3D物体/模型,Unity开发
前期硬件准备工作: 1.安卓机一台 2.电脑.软件就不说了 3.安卓机扫描3D物体的Scanner工具包下载:https://developer.vuforia.com/downloads/tool ...
- unity 3D物体添加 点击事件
方法一:物体 挂在 EventTrigger 选择 PointerClick 注册响应方法 相机 必须挂在 PhysicsRaycaster 场景中必须有:EventSystem(一般创建UI自动 ...
- unity 3d物体显示和2dUI显示相结合
1 利用摄像机深度 2 利用rendertexture 将3d物体渲染到texture上面
- unity 3d物体描边效果_从零开始的卡通渲染描边篇
序言: 一直对卡通渲染非常感兴趣,前后翻找了不少的文档,做了一些工作.前段时间<从零开始>的手游上线了,试着渲染了一下的其中模型,觉得效果很不错.打算写一个专栏记录其中的渲染技术.在后面的 ...
- Unity 3D入门——模型展示
unity版本 unity2018或unity2019 Unity相关网站 1.Unity官方文档,Unity中国官网,有中文文档 https://unity.cn/ 2.Unity的资源商店,有很多 ...
- Unity 3D模型展示之UI布局
整体布局情况 导入UI资源并统一将Texture Type设置为Sprite(2D and UI) 1.标题 将Text中的文本设置为'Unity 3D物体展示实例'. 添加Shadow与Outlin ...
- Unity3D入门:3D物体和操作
3D原生物体 3D原生物体的种类 Unity自带的3D物体模型:立方体Cube.球体Sphere.胶囊体Capsule.圆柱体Cylinder.平面Plane.四边形Quad 平面Plane和四边形Q ...
- Vuforia(高通)识别3D物体
Vuforia(高通)识别3D物体 使用Vuforia + Unity 实现3D物体的识别 Vuforia 3d Object识别 详解·高通Vuforia识别追踪3D物体/模型,Unity开发 FR ...
最新文章
- go channel 缓冲区最大限制_GO语言圣经学习笔记(八)Goroutines和Channels
- 联想服务器 重装系统u盘启动,联想_Lenovo BIOS Setup Utility 设置U盘启动教程
- 灰度图像阈值化分割常见方法总结及VC实现
- Linux 网络配置命令:ip、ss
- Java黑皮书课后题第4章:*4.3(几何:估算面积)应用4.1节图中以下地点的GPS位置:Georgia州的Atlanta……计算被这四个城市所围起来的区域面积
- python3 案例分享--Jupyter Notebook Demo
- session很快失效_一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~
- 轻量级OLAP(一):Cube计算
- 计算机硬盘驱动器越大,计算机基础知识1.3摘要.doc
- 公务员“上班睡觉”为何会被强势围观?
- 开源公司黄页之阿里巴巴开源软件推荐(二)
- 23种常见设计模式详解
- 《SQL 入门教程》示例数据库
- python 多态app_Python——多态
- git配置管理生成多个ssh的key
- 惠普战66二代 amd 处理器耳机插入后没声音的问题解决
- 微软工业计算机主机怎么样,炸裂!设计师们,微软喊你们换电脑了
- Anders Hejlsberg
- ubuntu14.04安装gnu/emacs24
- c语言写合泰单片机eeprom,合泰单片机EEPROM编程实例
热门文章
- html鼠标滑动显示内容,CSS DIV 怎样做出来鼠标移动上就显示其内容?
- m 555lu vip php,苹果cms开启vip会员收费权限教程
- 数据分析只有和业务挂钩才能产生真正驱动力
- 浅谈HTML5+css3新标签和特性
- signature=b03eb981ac8d43a4fcc09cd9a770d7ee,B03.300 [Categoria DeCS]
- MATLAB中plot函数如何在实线上加点
- 入驻亚马逊你该知道这些!—跨海汇
- DataCastle“卧龙大数据 微博热度预测竞赛”,用微博数据实时预测微博传播
- 重庆大学校友会计算机,校友会-重庆大学
- 携程网宕机事故深度剖析