目录

一.目的

1.想知道:unity动态修改标准材质自发光(Emission)

二.参考

1Unity利用材质自发光实现物体闪烁

三.操作:一:完成:变换材质自发光的数值

1.运行效果:材质变换了

1.代码

1.Unity设置

三.操作:二:完成:开关 材质自发光

1.运行效果:如果一开始关闭自发光、那么就开启;一开始开启,就关闭;

1.Unity设置

1.代码:开关 材质的自发光

三.操作:三:完成:让模型整体的自发光从发光到不发光

1.运行结果

1.注意

1.代码

1.Unity设置


一.目的

1.想知道:unity动态修改标准材质自发光(Emission)

二.参考

1Unity利用材质自发光实现物体闪烁

https://blog.csdn.net/qq_21397217/article/details/80967432

  1. 总结:good:亲测有效

三.操作:一:完成:变换材质自发光的数值

1.运行效果:材质变换了

1.代码

  1. 启用自发光效果的代码是 material.EnableKeyword("_EMISSION")

    关闭自发光效果的代码是 material.DisableKeyword("_EMISSION")

    设置自发光颜色和亮度的代码是 material.SetColor("_EmissionColor", Color.HSVToRGB(_h, _s, _v))

  2. 其中的 _h、_s、_v参数分别代表颜色的色相、饱和度和亮度。
  3. 获取颜色的色相、饱和度和亮度的代码为 Color.RGBToHSV(color, out _h, out _s, out _v)

material_f22_main.SetColor("_EmissionColor", new Color(0,1,1));

1.Unity设置

三.操作:二:完成:开关 材质自发光

1.运行效果:如果一开始关闭自发光、那么就开启;一开始开启,就关闭;

  1. 总结:材质是个实例,而不是对原本材质进行处理
  2. 总结:文件夹里面的材质不会变换,变换的新建的材质,这个是有区别的

1.Unity设置

1.代码:开关 材质的自发光

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MyTest_emission : MonoBehaviour
{/// <summary>Material:主要使用到的材质</summary>[Header("Material:主要使用到的材质")][Tooltip("Material:主要使用到的材质")]public Material material;    private readonly string _keyword = "_EMISSION";private readonly string _colorName = "_EmissionColor";// Start is called before the first frame updatevoid Start(){测试:1 :失败:开启自发光//material = this.GetComponent<MeshRenderer>().material;//material.EnableKeyword(_keyword);测试:2:完成:开启自发光   //material = this.GetComponent<MeshRenderer>().material;//material.EnableKeyword(_keyword);//测试:3:待检测:开关自发光       material = this.GetComponent<MeshRenderer>().material;if (material.IsKeywordEnabled("_EMISSION")){material.DisableKeyword(_keyword);}else{material.EnableKeyword(_keyword);}}// Update is called once per framevoid Update(){}
}

三.操作:三:完成:让模型整体的自发光从发光到不发光

1.运行结果

  1. 可以发现自发光从亮到不亮

1.注意

  1. 如果要Build出来让自发光有效,需要将材质的自发光一开始就要打开。

1.代码

  1. 总结:操作的材质不能是Project里面的材质,只能是对象自己材质新建一个对象,这样避免Project里面材质变换导致对象的材质也变换了
  2. 总结:材质变换需要使用 面向对象的思想
  3. 总结:使用List,列表将整个模型的材质球都添加,对其整体操作;不能使用Material的数组,这样只会对数组最后赋值的材质进行变换
  4. 总结:协程作为定时器材质球变换很不错的,
  5. 总结:使用  private Coroutine coroutine_glinting 进行控制协程句柄,值得学习。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// 功能:F22材质变换,模拟出从虚到实的效果
/// </summary>
public class MyMaterialsChange : MonoBehaviour
{/// <summary>float:材质变换的速度</summary>[Header("float:材质变换的速度")][Tooltip("float:材质变换的速度")]public float fSpeed_materials=0.1f;/// <summary>Color:开始的颜色</summary>private Color color_from=new Color(0,0,1);/// <summary>Color:结束的颜色</summary>private Color color_to= new Color(0, 0, 0);/// <summary>Coroutine:协程句柄</summary>private Coroutine coroutine_glinting;/// <summary>  List<Material>:链表<材质>:需要自发光的材质</summary>List<Material> list_material_needEmission;/// <summary>string:自发光材质属性的关键字</summary>private readonly string str_keyword = "_EMISSION";/// <summary>string:自发光材质属性的颜色名字</summary>private readonly string str_colorName = "_EmissionColor";void Start(){//使用链表:开启自发光后更改自发光属性,让其变得虚幻MeshRenderer[] arr_MeshRenderer = this.GetComponentsInChildren<MeshRenderer>();list_material_needEmission = new List<Material>();//列表赋值for (int i = 0; i < arr_MeshRenderer.Length; i++){if (arr_MeshRenderer[i].materials[0]){list_material_needEmission.Add(arr_MeshRenderer[i].materials[0]);}}//列表材质自发光变换for (int i = 0;  i <list_material_needEmission.Count; i++){list_material_needEmission[i].EnableKeyword(str_keyword);list_material_needEmission[i].SetColor(str_colorName, color_from);}//Start_glinting();}// Update is called once per framevoid Update(){if (Input.GetKeyUp(KeyCode.B)){Start_glinting();}}/// <summary>/// 开始闪烁。/// </summary>public void Start_glinting(){if (coroutine_glinting != null){StopCoroutine(coroutine_glinting);}coroutine_glinting = StartCoroutine(IE_glinting());}/// <summary>/// 停止闪烁。/// </summary>public void Stop_glinting(){if (coroutine_glinting != null){StopCoroutine(coroutine_glinting);}}/// <summary>/// 控制自发光强度。/// </summary>/// <returns></returns>private IEnumerator IE_glinting(){//材质变换while (true){for (int i = 0; i <list_material_needEmission.Count; i++){Color tmpColor= list_material_needEmission[i].GetColor(str_colorName);if (tmpColor.b < 0.01f){break;}tmpColor = new Color(tmpColor.r, tmpColor.g, tmpColor.b-Time.deltaTime*fSpeed_materials);list_material_needEmission[i].SetColor(str_colorName, tmpColor);}yield return  null;}}}

1.Unity设置

unity动态修改标准材质自发光(Emission)相关推荐

  1. Unity 动态修改URP自带材质参数

    Unity 动态修改URP自带材质参数 前言 代码 Emission 参考连接 前言 修改此处默认参数 代码 Emission 启用自发光效果的代码是 material.EnableKeyword(& ...

  2. Unity动态修改窗口分辨率

    有没有遇到Unity发布出来的exe每改一次分辨率,就要重新发布一次,我们来实现以下可以动态修改分辨率的功能,只要按下键盘上Ctrl + 上/下,就可以将分辨率调大一级过调小一级,可以拿来当工具使. ...

  3. Unity 动态循环设置材质球的图片

    动态循环设置材质球的图片: public Texture[] textures;private Renderer renderer;// Use this for initializationvoid ...

  4. Unity实现动态修改模型材质球

    一.定义需要替换的材质球(且加载该材质球) private Material _HighLightMat; //实现闪烁高亮效果材质球 _HighLightMat = Resources.Load(& ...

  5. unity标准材质,emission的设置

    一般shader的feature都是,通过Material.EnableKeyword(DisableKeyword关闭), 或者使用的SetKeyword使用设置.所以一般要设置关键字"_ ...

  6. Unity动态修改材质球

    脚本里直接两个材质球赋值代码,当不同情况触发时调用相应的函数: public class CM_missingScreen : MonoBehaviour {          public void ...

  7. 随笔-Unity中修改Spine材质

    我们在Unity中使用Spine动画时,往往需要在材质上添加一些效果,比如描边.闪光等等.    这些效果其实在Spine插件中就给我们提供好了对应的Shader,路径分别是:Spine/Outlin ...

  8. Unity动态修改环境光照强度

    在RenderSettings中存在ambientIntensity属性,但是当我们使用脚本修改该属性的时候,会发现环境光强度并没有发生变化,这可能是Unity的一个bug.但是我们可以通过修改环境光 ...

  9. Unity 动态修改HDR 的intensity

    1 打开一个unity自带的share spirit , 2 修改color节点为 HDR 模式 ------------------------------脚本 public class TestE ...

最新文章

  1. SQL-54 查找排除当前最大、最小salary之后的员工的平均工资avg_salary。
  2. java doc 文档,注解详解
  3. EFDC水模型 初学者入门 及软件下载学习指导
  4. 用clipboard.js实现纯JS复制文本到剪切板
  5. element-ui中表单验证rules
  6. POJ 1681 高斯消元 枚举自由变元
  7. UISegmentedControl UISlider
  8. maven依赖avro_在MapReduce中使用Avro
  9. mysql命令行导入dmp文件,oracle的备份文件(dmp)导入mysql数据库方法
  10. 大组合数:Lucas定理
  11. java发送邮件代码
  12. PS CS4抽出滤镜抠图小技巧
  13. tbschedule使用
  14. 入侵服务器的一种方法
  15. 计算机一级标题底纹,2017年计算机一级考试MSOffice考点解析:幻灯片背景的设置...
  16. 惠普微型计算机主机拆卸,HP 惠普 Pavilion Wave 台式主机 拆机
  17. Python图形用户界面和游戏开发
  18. 这个地方沸腾,高手争雄,至尊大决战,从天上杀到地下,又从地上打到云霄上!
  19. 最简单的h264/h265/svac和g711封装成ps流符合gb28181过检码流要求
  20. 神经网络激活函数及其Katex公式代码模板合集

热门文章

  1. 《惢客创业日记》2019.01.21(周一)你还记得米卢吗?
  2. Android Studio Flavors详解
  3. 百度一键Root使用教程
  4. 索尼g8441是什么版本_复兴之路!索尼新机G8341/G8441现身波兰
  5. 湖南师范学院大学计算机等级考试,湖南师范大学计算机等级考试时间
  6. python长什么样子图片_怎么样提升python图片文字识别精度,有什么库或是方法吗?...
  7. 女人:不爱,请收起你的暧昧
  8. js 获取当前是这个年份的第几周+获取这周的开始和结束日期
  9. 在墙上找垂直线_红外线水平仪如何看墙面垂直
  10. 2021-11-28 Misc 杂项略览 一 图片隐写1 直接隐写【T.O.CTF】