1. 模型同事给的fbx文件都会有材质球,这个就是物体原始的材质球(Origin Material),用于“还原”;使物体透明化也需要一个材质球(Transparent Material)(自行百度,如果能自写shader更好)。
  2. 通过把物体所有的材质球更换为透明材质球达到“透明化”的效果;
    通过把物体所有的材质球更换为原始材质球达到“还原”的效果。
 /// <summary>/// 物体透明化/// </summary>/// <param name="go"></param>/// <param name="mat"></param>public static void Convert2Virtual(GameObject go, Material mat) {if(go == null || mat == null) {Debug.Log("The GameObject or Material is NULL");return;}Renderer[] renderers = go.GetComponentsInChildren<Renderer>();Material[] materials = null;for(int i = 0; i < renderers.Length; i++) {materials = new Material[renderers[i].materials.Length];for (int j = 0; j < materials.Length; j++) {materials[j] = mat;}renderers[i].materials = materials;}}/// <summary>/// 物体不透明/// </summary>/// <param name="go"></param>/// <param name="mats"></param>public static void Convert2Real(GameObject go, Material[][] mats) {if(go == null || mats.Length == 0) {Debug.Log("The GameObject or Material is NULL");return;}Renderer[] renderers = go.GetComponentsInChildren<Renderer>();if(mats.Length != renderers.Length) {Debug.Log("The count of material is NOT true");return;}for(int i = 0; i < renderers.Length; i++) {renderers[i].materials = mats[i];}}

1.不可以用获取组件的方式(GetComponent)得到材质球,Material继承于Object。
2.模型同事给的fbx文件挂载了材质球的组件可能是MeshRender、SkinnedMeshRender等都继承于Renderer,统一用Renderer去获取。
3.一个fbx文件下可能有多个物体有材质球且不止一个,所以需要用Material[][]这么一个二维数组去存储原始材质球。
4.单个物体调用一次函数,多个物体循环调用函数。用一个bool或者枚举的两种状态去切换“透明”和“还原”两种状态,不要去判断是否是透明材质球(本人亲自测试过:1).直接材质球去判断 2).材质球的名字去判断(ab加载的模型,原始材质球自带一个(Instance)字符串,就算在判断加上这一段字符也不行),这两种方式都不行)。

ps:汽车拆装、工厂管道等场景应用

Unity之使物体透明化和还原相关推荐

  1. unity中使物体无缝连接的方法

    有时候我们创建了两个物体,想使之无缝连接.如果一点一点调试未免太过繁琐,而且很难达到理想的效果.那么这时,我们可以用unity自带的方法来实现. 这里,我们用两个cube物体来做示范: 第一个方法: ...

  2. Shader实战(1):Unity中使物体不受光照影响(不区分明暗面)

    目录 前言 一.原场景效果 二.操作流程 三.效果演示 前言 在做项目时碰到需要在一个有光照场景中使某一个模型不受光照影响,即不区分明暗面,因此本文记录如何修改shader使模型在有光照的情况下不区分 ...

  3. Unity利用Curvy Spline插件生成曲线,并使物体沿生成的曲线运动

    插件下载: 网络资源 Assets Store 我用的是Curvy Splines - 7.1.4.导入后场景中会出现如下界面. 创建曲线 https://blog.csdn.net/cordova/ ...

  4. 【Unity笔记】使物体(船)漂浮在水面上——浮力

    在官方论坛看到一个关于怎么使物体漂浮在水面上的讨论:https://forum.unity3d.com/threads/floating-a-object-on-water.31671/ 水动力系统 ...

  5. [教程] 在Unity中制作物体破碎效果

    这篇教程将教大家如何在Unity中制作一个简单的碎片效果.当物体撞击或销毁时,我们将物体分裂为更小的碎片来取代之前的仅仅直接"删除"物体. 需求 这篇教程需要最新版本的Unity, ...

  6. unity 如何让物体不显示材质_unity如何把材质调透明

    unity透明贴图怎么设置显示 在Unity中,透明材质球不接受阴影.使用Transparent/Cutout/Bumped Diffuse材质,透明通道稍差但是接收阴影.同时对其Cast Shado ...

  7. Unity三种物体溶解方法

    Unity三种物体溶解方法 @[TOC](Unity三种物体溶解方法 效果展示 1. 利用Noise纹理进行溶解 shader要点 shader代码 2. 屏幕空间棋盘格 shader要点 shade ...

  8. 使物体发光的插件highlighting system v2.0

    标题使物体边缘发光的插件highlighting system v2.0 今天给大家分享一个使物体发光的插件,highlighting system v2.0,可以根据自己的需要,设置从某种颜色到另一 ...

  9. Unity 判断两物体碰撞方向

    Unity 判断两物体碰撞方向 问题描述:游戏玩家可以在两个平面之间不断进行跳跃,且出现玩家顶着上面平面飞着走的情况. 问题原因:玩家碰撞体与平面不断进行碰撞体检测,导致游戏玩家可以不断进行跳跃. 解 ...

最新文章

  1. Geoserver汉语版出来啦!!
  2. 【 MATLAB 】any 函数介绍(确定是否有任意数组元素非零)
  3. 【存储知识学习】第五章-5.4虚拟磁盘和5.5卷管理层-《大话存储》阅读笔记
  4. linux 串口特别是接收
  5. 一个关于微服务架构和monolithic架构的讨论
  6. 微信整人假红包图片_警惕:千万别点!这些红包是假的
  7. PyTorch框架学习四——计算图与动态图机制
  8. re:Invent大会第十年,亚马逊云科技推出了哪些底层自研技术
  9. Java反射机制API
  10. Ubuntu 16.04 - 64bit 解压 rar 报错 Parsing Filters not supported
  11. Python 中的注意点_s2
  12. cocos2d-x 中LUA和平台之间的函数调用理解
  13. 每天一道剑指offer-二叉搜索数的后序遍历序列
  14. singleTop对onActivityForResult的影响
  15. 2020全国地图矢量数据gis地图数据(下载获取支持)
  16. 十六进制颜色值对照表
  17. iOS开发调试技巧之模拟定位国外位置
  18. springboot:运行(部署)时出现WebServerException: Unable to create tempDir.
  19. Spring Boot技术知识点:如何实现二维码生成工具
  20. 3D建模师这个职业薪资高吗?晋升路线有哪些?

热门文章

  1. 前端:LayUi监听表格单元格,编辑后恢复原数据
  2. 3.4 jest使用pug
  3. 计挑赛初赛试题(2020)(一)
  4. linux下ms安装教程,MS在linux的安装过程.doc
  5. HPB钱包与中间件接口
  6. 英语广播原声听力100篇MP3及听力原文
  7. 上手评测:华为nova8和nova7Pro哪个好?区别是什么
  8. android闪屏问题
  9. 求关于oled屏的闪屏问题
  10. Kubernetes生产实践系列之二十二:Service Mesh之在Kubernetes部署Linkerd2进行service mesh