HDRP版本是7.3.1 (升级到7.4.1也是一样的)

Unity版本是2019.3.8f

问题是我通过替换Shader的方式改变材质的效果(改成高亮或者透明),然后还原,在Editor中正常的,但是在打包后运行时还原回来材质变成了黑色。是那种纯黑色,没有贴图的,怀疑在切换Shader过程中,原来的Shader的设置丢失了。

修改材质的Shader时有用ShaderMaterial就没问题,用Material就有问题。

我的需求时点击一物体,该物体变成高亮颜色,其他物体全部透明。

因为其他物体数量很多,几万个,如果用修改其他物体的材质的方式,而不是修改SharedMaterial的Shader方式,需要几秒的实际。

一、设置高亮

1.设置高亮_Material_Shader

for (int i = 0; i < meshRender.materials.Length; i++)
{meshRender.materials[i].shader = NodeHighlightSystem.Instance.Hightlight_Shader;
}

2.设置高亮_SharedMaterial_Shader

for (int i = 0; i < meshRender.sharedMaterials.Length; i++)
{meshRender.sharedMaterials[i].shader = sys.Hightlight_Shader;
}

3.设置高亮_Material

Material[] materialsNew = meshRender.materials;
for (int i = 0; i < meshRender.materials.Length; i++)
{materialsNew[i] = NodeHighlightSystem.Instance.Highlight_Mat;
}
meshRender.materials = materialsNew;

二、还原高亮

1.还原_Material_Shader,Shaders事先保存下来

for (int i = 0; i < meshRender.materials.Length; i++)
{meshRender.materials[i].shader = shaders[i];
}

2.还原_SharedMaterial_Shader,Shaders事先保存下来

for (int i = 0; i < meshRender.materials.Length; i++)
{meshRender.sharedMaterials[i].shader = shaders[i];
}

3.还原_Materials,Materials事先保存下来

meshRender.materials = materials;

三、全部透明和还原

1.设置透明_SharedMaterial_Shader,allSharedMaterials提前获取

        if (allSharedMaterials.Count == 0){GetAllSharedMaterials();}for (int i = 0; i < allSharedMaterials.Count; i++){Material item = allSharedMaterials[i];if (item.shader!= Transparent_Shader){//item.shader = allSharedShaders[i];item.shader = Transparent_Shader;}}

2.透明恢复_SharedMaterial_Shader,allSharedShaders提前获取

for (int i = 0; i < allSharedMaterials.Count; i++){Material item = allSharedMaterials[i];item.shader = allSharedShaders[i];}

-------------------------------------------------------------------------------------------

四、组合测试

组合1:1.设置高亮_Material_Shader+1.还原_Material_Shader+透明其他

会变黑

最后会黑成这样

组合2:1.设置高亮_Material_Shader+2.还原_SharedMaterial_Shader+透明其他

会变黑

组合3:1.设置高亮_Material_Shader+2.还原_Materials+透明其他

不会变黑

组合4:2.设置高亮_SharedMaterial_Shader+2.还原_Material_Shader+透明其他

不会变黑

因为修改的是SharedMaterial的Shader,点击的物体共用材质的其他物体也会高亮。

还原回去再点击就是独立高亮了。

组合5:2.设置高亮_SharedMaterial_Shader+2.还原_SharedMaterial_Shader+透明其他

不会变黑

和上面情况类似,但是,我理解这里还原也是SharedMaterial的,应该后面也都是

组合6:3.设置高亮_SharedMaterial_Shader+3.还原_Materials+透明其他

不会变黑,而且Materials还原回去后,再点击,相关的物体也一起高亮,奇怪,和上面的情况

不管怎样,高亮都是不能使用修改SharedMaterial的Shader的方式的。

组合7:3.设置高亮_Materials+3.还原_Material_Shader+透明其他

变白了...

修改了材质后,修改材质的Shader,其实就没有还原回去了,最后相当于是把高亮材质再改了个Shader。

组合8:3.设置高亮_Materials+3.还原_SharedMaterial_Shader+透明其他

和上面一样,变白了

组合9:3.设置高亮_Materials+3.还原_Materials+透明其他

没问题,可以

三、最终的解决办法

HDRP打包后材质黑色问题相关推荐

  1. Expo大作战(十九)--expo打包后,发布分用程序到商店的注意事项

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  2. 便利贴--25{uniapp移动端滑动模块-因为uniapp打包后没有window,所以要另外去做监听和触控事件的传递}

    便利贴--25{uniapp移动端滑动模块-因为uniapp打包后没有window,所以要另外去做监听和触控事件的传递} 效果![请添加图片描述](https://img-blog.csdnimg.c ...

  3. 解决Springboot项目在idea中能正常使用,但打包后无法运行的情况

    解决Springboot项目在idea中能正常使用,但打包后无法运行的情况 自己做一些活的时候偶然发现的bug:在springboot的web项目中,打包之前能正常的运行,包括测试类里面的代码也都是正 ...

  4. vue打包后图片找不到情况

    打包之前需要修改如下配置文件: 配置文件一:build>>>utils.js (修改publicPath:"../../" , 这样写是处理打包后找不到静态文件( ...

  5. vue+elementui项目打包后样式变化问题

    main.js中的引入顺序决定了打包后css的顺序,组件内的样式没有生效可能是被第三方组件样式覆盖了. 把第三方组件 ElementUI放在前面引入,router放在后面引入,就可以实现组件样式在第三 ...

  6. flask 渲染 vue 打包后的dist文件(直接用后端渲染)

    flask 渲染 vue 打包后的dist文件(直接用后端渲染) vue项目打包出dist文件 npm run build 代码 from flask import Flask from flask ...

  7. 使用webpack打包后,vscode中vue代码变白色的解决办法

    使用webpack打包后,vscode中vue代码变白色的解决办法 卸载vetur,重装vetur

  8. 多模块打包后,扫描不到@controller和@service,实现 ADD DIRECTORY ENTRIES

    多模块打包后,扫描不到@controller和@service等Bean. 原因:打包时没有生成目录信息 解决办法: 1.在eclipse或者myeclipse 打包时 勾选 ADD DIRECTOR ...

  9. webpack打包后自动弹出浏览器查看效果

    当配置了webpack自动打包和预览页面后,每次打包都要复制 http://localhost:8080/ 到浏览器中查看效果,那么我们能不能在打包后自动打开浏览器查看效果呢,答案是可以的. 在pac ...

最新文章

  1. 400名微软员工主动曝光薪资:28万元到228万元不等!
  2. IROS 2020 | 跨视角语义分割前沿进展
  3. 【s操作】手机移动数据网络问题初级解决方案,论手机运营商网络状况
  4. python修改父类属性_Python super和设置父类属性
  5. 开机启动脚本/etc/init.d/rcS
  6. 字符串startswith_JavaScript字符串startsWith()方法与示例
  7. Maven : [ERROR] Project xxx is duplicated in the reactor @
  8. bucket sort sample sort 并行_Java 中 Arrays.sort 和 Arrays.parallelSort 哪个更快?
  9. 如何避免程序员的大脑超载?
  10. MFC CListCtrl 将一个列表的选中项添加到另一个列表
  11. UnicodeDecodeError: 'gbk' codec can't decode byte 0xab in position 11126: illegal multibyte sequence
  12. 搜索引擎优化(SEO) 基础常识
  13. Python运算(五)统计statistic模块
  14. 笔记本键盘失灵,外接键盘不行,只有无线鼠标能用【完美解决】!
  15. dsp调音一次多少钱_dsp调音技巧
  16. Taproot升级在即!门限签名技术将给数字钱包带来什么?
  17. RFID资产管理解决方案
  18. 商务邮箱一般用什么邮箱正式?VIP邮箱名怎么设置好?
  19. MySQL JDBC 客户端反序列化漏洞分析
  20. access中数据类型转换函数

热门文章

  1. debussy vhdl co-simulation
  2. linux 常用命令 及常用 排查问题 工具
  3. 全面拥抱云 用友U9 cloud来了
  4. js 高耗时代码异步处理
  5. RSA实现对文件的加密解密
  6. python初中数学建模培训_中学生数学建模训练营VIP班
  7. c语言数组越界也太难了吧,跨函数越界啥意思?
  8. Android Studio Chipmunk Patch 2(android-studio-2021.2.1.16)下载地址
  9. lib linux.so2 bad,linux – docker,openmpi和/ proc / mounts行的意外...
  10. java park_park和unpark