unity动态修改标准材质自发光(Emission)
目录
一.目的
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
- 总结:good:亲测有效
三.操作:一:完成:变换材质自发光的数值
1.运行效果:材质变换了
1.代码
启用自发光效果的代码是 material.EnableKeyword("_EMISSION")
关闭自发光效果的代码是 material.DisableKeyword("_EMISSION")
设置自发光颜色和亮度的代码是 material.SetColor("_EmissionColor", Color.HSVToRGB(_h, _s, _v))
- 其中的 _h、_s、_v参数分别代表颜色的色相、饱和度和亮度。
- 获取颜色的色相、饱和度和亮度的代码为 Color.RGBToHSV(color, out _h, out _s, out _v)
material_f22_main.SetColor("_EmissionColor", new Color(0,1,1));
1.Unity设置
三.操作:二:完成:开关 材质自发光
1.运行效果:如果一开始关闭自发光、那么就开启;一开始开启,就关闭;
- 总结:材质是个实例,而不是对原本材质进行处理
- 总结:文件夹里面的材质不会变换,变换的新建的材质,这个是有区别的
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.注意
- 如果要Build出来让自发光有效,需要将材质的自发光一开始就要打开。
1.代码
- 总结:操作的材质不能是Project里面的材质,只能是对象自己材质新建一个对象,这样避免Project里面材质变换导致对象的材质也变换了
- 总结:材质变换需要使用 面向对象的思想
- 总结:使用List,列表将整个模型的材质球都添加,对其整体操作;不能使用Material的数组,这样只会对数组最后赋值的材质进行变换
- 总结:协程作为定时器材质球变换很不错的,
- 总结:使用 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)相关推荐
- Unity 动态修改URP自带材质参数
Unity 动态修改URP自带材质参数 前言 代码 Emission 参考连接 前言 修改此处默认参数 代码 Emission 启用自发光效果的代码是 material.EnableKeyword(& ...
- Unity动态修改窗口分辨率
有没有遇到Unity发布出来的exe每改一次分辨率,就要重新发布一次,我们来实现以下可以动态修改分辨率的功能,只要按下键盘上Ctrl + 上/下,就可以将分辨率调大一级过调小一级,可以拿来当工具使. ...
- Unity 动态循环设置材质球的图片
动态循环设置材质球的图片: public Texture[] textures;private Renderer renderer;// Use this for initializationvoid ...
- Unity实现动态修改模型材质球
一.定义需要替换的材质球(且加载该材质球) private Material _HighLightMat; //实现闪烁高亮效果材质球 _HighLightMat = Resources.Load(& ...
- unity标准材质,emission的设置
一般shader的feature都是,通过Material.EnableKeyword(DisableKeyword关闭), 或者使用的SetKeyword使用设置.所以一般要设置关键字"_ ...
- Unity动态修改材质球
脚本里直接两个材质球赋值代码,当不同情况触发时调用相应的函数: public class CM_missingScreen : MonoBehaviour { public void ...
- 随笔-Unity中修改Spine材质
我们在Unity中使用Spine动画时,往往需要在材质上添加一些效果,比如描边.闪光等等. 这些效果其实在Spine插件中就给我们提供好了对应的Shader,路径分别是:Spine/Outlin ...
- Unity动态修改环境光照强度
在RenderSettings中存在ambientIntensity属性,但是当我们使用脚本修改该属性的时候,会发现环境光强度并没有发生变化,这可能是Unity的一个bug.但是我们可以通过修改环境光 ...
- Unity 动态修改HDR 的intensity
1 打开一个unity自带的share spirit , 2 修改color节点为 HDR 模式 ------------------------------脚本 public class TestE ...
最新文章
- SQL-54 查找排除当前最大、最小salary之后的员工的平均工资avg_salary。
- java doc 文档,注解详解
- EFDC水模型 初学者入门 及软件下载学习指导
- 用clipboard.js实现纯JS复制文本到剪切板
- element-ui中表单验证rules
- POJ 1681 高斯消元 枚举自由变元
- UISegmentedControl UISlider
- maven依赖avro_在MapReduce中使用Avro
- mysql命令行导入dmp文件,oracle的备份文件(dmp)导入mysql数据库方法
- 大组合数:Lucas定理
- java发送邮件代码
- PS CS4抽出滤镜抠图小技巧
- tbschedule使用
- 入侵服务器的一种方法
- 计算机一级标题底纹,2017年计算机一级考试MSOffice考点解析:幻灯片背景的设置...
- 惠普微型计算机主机拆卸,HP 惠普 Pavilion Wave 台式主机 拆机
- Python图形用户界面和游戏开发
- 这个地方沸腾,高手争雄,至尊大决战,从天上杀到地下,又从地上打到云霄上!
- 最简单的h264/h265/svac和g711封装成ps流符合gb28181过检码流要求
- 神经网络激活函数及其Katex公式代码模板合集
热门文章
- 《惢客创业日记》2019.01.21(周一)你还记得米卢吗?
- Android Studio Flavors详解
- 百度一键Root使用教程
- 索尼g8441是什么版本_复兴之路!索尼新机G8341/G8441现身波兰
- 湖南师范学院大学计算机等级考试,湖南师范大学计算机等级考试时间
- python长什么样子图片_怎么样提升python图片文字识别精度,有什么库或是方法吗?...
- 女人:不爱,请收起你的暧昧
- js 获取当前是这个年份的第几周+获取这周的开始和结束日期
- 在墙上找垂直线_红外线水平仪如何看墙面垂直
- 2021-11-28 Misc 杂项略览 一 图片隐写1 直接隐写【T.O.CTF】