unity通过代码改变材质球颜色

gitee地址:https://gitee.com/asiworld

csdn博客地址:https://blog.csdn.net/JianShengShuaiest

bilibili地址:https://space.bilibili.com/15766978

大家好我是谢斯,一个unity开发工程师,今天来介绍一下unity中改变材质球颜色的方法,有的人不知道材质球的说法,也叫做

  • 通过代码修改模型颜色
  • 通过代码修改材质球颜色
  • 通过代码改变模型颜色
  • 通过代码改变材质球颜色
  • 动态修改模型材质球颜色
  • 逐渐改变材质球颜色

但实际上都是一个意思,就是修改材质球的颜色,因为模型上的颜色和材质球是有关系的,也可以解决多材质球改变颜色的问题

下面进入正题

得到材质球

对于材质球的修改方法有很多,但是万变不离其宗,第一个我们需要的就是得到材质球,有了材质球,我们才可以按照我们想要的操作去操作材质球,材质球是一个数组,有的很简单,只有一个材质球

有的比较负责,有多个材质球

我们得到材质球的方法也有一次得到一个的,和一次得到很多的,大体上有两种方式,

第一种是得到第一个材质球

m_material = GetComponent<Renderer>().material;

返回分配给渲染器的第一个实例化的Material。

第二种是得到一个材质球的list

Material[] m_arr_material = GetComponent<Renderer>().materials;

返回此对象的所有实例化材料。

通过以上两种方式呢,就有很多种改变材质球的颜色或者其他属性的方式,

改变材质球颜色

1. 简单粗暴法1


using UnityEngine;public class 方法1 : MonoBehaviour
{private Material m_material;// 加载脚本实例时调用 Awakeprivate void Awake(){m_material = GetComponent<Renderer>().material;}// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnterprivate void OnMouseEnter(){m_material.color = Color.red;}// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExitprivate void OnMouseExit(){m_material.color = Color.white;}
}

通过这种方式直接改变材质球颜色

2. 简单粗暴法2

这个和方法1差不多只是修改的方式发生了变化

using UnityEngine;public class 方法2 : MonoBehaviour
{private Material m_material;// 加载脚本实例时调用 Awakeprivate void Awake(){m_material = GetComponent<Renderer>().material;}// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnterprivate void OnMouseEnter(){m_material.SetColor("_Color", Color.red);}// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExitprivate void OnMouseExit(){m_material.SetColor("_Color", Color.white);}
}

3. 粗中有细法

这个方法的改变方法和1,2相同只是不同的在于得到材质球的方式不同

using UnityEngine;public class 方法5 : MonoBehaviour
{private Material m_material;// 加载脚本实例时调用 Awakeprivate void Awake(){m_material = GetComponent<Renderer>().materials[1];}// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnterprivate void OnMouseEnter(){m_material.SetColor("_Color", Color.red);}// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExitprivate void OnMouseExit(){m_material.SetColor("_Color", Color.white);}
}

4. 自我复杂法

这个方法就是很稳定,绝对不会出现任何错误,但是很麻烦,会多写很多句

using UnityEngine;public class 方法6 : MonoBehaviour
{private Renderer m_renderer;private Material[] m_arr_material;// 加载脚本实例时调用 Awakeprivate void Awake(){m_renderer = GetComponent<Renderer>();m_arr_material = m_renderer.materials;}// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnterprivate void OnMouseEnter(){m_arr_material[1].SetColor("_Color", Color.red);m_renderer.materials = m_arr_material;}// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExitprivate void OnMouseExit(){m_arr_material[1].SetColor("_Color", Color.white);m_renderer.materials = m_arr_material;}
}

逐渐的改变材质球颜色

可以使用lerp 也可以使用其他插件 比如dotween

1. 使用lerp

using UnityEngine;public class 方法4 : MonoBehaviour
{private Material m_material;private Color m_color = Color.white;// 加载脚本实例时调用 Awakeprivate void Awake(){m_material = GetComponent<Renderer>().material;}// 如果 MonoBehaviour 已启用,则在每一帧都调用 Updateprivate void Update(){m_material.SetColor("_Color", Color.Lerp(m_material.GetColor("_Color"), m_color, Time.deltaTime));}// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnterprivate void OnMouseEnter(){m_color = Color.red;}// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExitprivate void OnMouseExit(){m_color = Color.white;}
}

2. 使用dotween

using DG.Tweening;using UnityEngine;public class 方法3 : MonoBehaviour
{private Material m_material;// 加载脚本实例时调用 Awakeprivate void Awake(){m_material = GetComponent<Renderer>().material;}// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnterprivate void OnMouseEnter(){m_material.DOColor(Color.red, 1.0f);}// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExitprivate void OnMouseExit(){m_material.DOColor(Color.white, 1.0f);}
}

[unity3d][通过代码]改变材质球颜色,动态改变材质球颜色,动态改变模型颜色相关推荐

  1. Unity3D代码动态修改材质球的颜色

    代码动态修改材质球的颜色: gameObject.GetComponent<Renderer>().material.color=Color.red;//当材质球的Shader为标准时,可 ...

  2. Unity 代码动态更改SHADER的相关属性(如颜色、SMOOTHNESS、材质……)

    先我们需要明确material里面哪些属性可以通过代码调整,点击material上的齿轮按钮,选择select shader或者edit shader,点击进去注意material的**propert ...

  3. Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...

  4. Unity动态创建材质球

    目录 一.获取贴图 1:从Assets文件中获取 2:从本地文件中获取 二.创建材质球 三.替换材质 总结 前言 我们在做一些AR类似与涂涂乐的功能时,经常会用到给模型替换材质球的功能.当我们的用户创 ...

  5. (八)unity自带的着色器源码剖析之——————Unity3D的全局光照和阴影:下篇(unity3D中的球谐光照和SH球谐函数、unity实时阴影抗锯齿解决方案)

    一.探针基于球谐函数的全局光照 球谐光照是基于预计算辐射度传输理论实现的一种实时渲染技术.预计算辐射度传输技术能够重现在区域面光源照射下的全局照明效果.这种技术通过在运行前对场景中光线的相互作用进行预 ...

  6. js 实现上下拖动改变父 div 的高度,左右上下拖动动态分割孩子的宽高

    1. 需求 实现父 div 里面 左右,上下动态分割 div,并上下改变父 div 的高度,并且宽和高都是按百分比(如图) . 2. 实现原理 2.1 父布局 <div class='hj-wr ...

  7. UE4如何贴混合贴图_UE4[蓝图]动态积雪材质的实现(一)

    本文思路提供:Catherine威威 续上篇文章<UE4[蓝图]下雪效果及雪的材质的实现>,本篇继续制作积雪效果. 主要应用的两个材质分两篇来写,一个是物体上的积雪,另一个是地面上的积雪. ...

  8. 页面中鼠标触碰字体后切换颜色且随鼠标移走后改变

    such as: 鼠标移上去: 颜色会随着鼠标移动变回原来的颜色 实现这个效果其实很简单: less代码: li {display: inline-block;width: 50/100rem;hei ...

  9. 有红、黄、绿三种颜色的球,其中红球 3 个, 黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。1. 输出情况总数;2.输出摸取情

    内容1:有红.黄.绿三种颜色的球,其中红球 3 个, 黄球 3 个,绿球 6 个.先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配.1. 输出情况总数;2.输 ...

最新文章

  1. mysql 字段属性命令_mysql 操作字段 命令
  2. WIN32多线程抢红包练习
  3. swift 第四课 随意 设置button 图片和文字 位置
  4. MapReduce操作时Error:The method setInputPaths(JobConf, String) in the type FileInputFormat is not
  5. Any-Proxy在线反向代理源码
  6. Laravel源码学习文章汇总
  7. UPNP解读2-含netbios,wins,DNS
  8. pattern recognition letter 投稿时word 模板的说明乱码
  9. 再谈如何成为一名优秀CTO
  10. 在 Keras 中为循环神经网络添加自定义注意层
  11. openwrt编译基本教程
  12. 网站后台爆破工具:WebCrack
  13. 搭建网站的六个基本步骤流程(教程解说)
  14. 南科大副教授“跳槽”到深圳中学引热议!大学老师不香了吗?
  15. mysql字符集与校对规则设置_mysql 字符集和校对规则
  16. HTML+CSS实现导航条及下拉菜单1
  17. 为了保护您的视力,请对电脑作如下设置
  18. 从《长安十二时辰》看企业中台战略
  19. 使用Photoshop辅助线制作ps切片教程
  20. 需要在计算机安装msxml版本,安装Office2010提示需要MSXML版本6.10.1129.0的解决方法...

热门文章

  1. Citrix 云桌面部署
  2. jupyter template_path not recognized
  3. LDAP 服务器搭建
  4. Linux连接荣耀路由器pro2,荣耀路由pro2设置方法
  5. 运动需要用到哪些东西,双十一好用的运动装备分享
  6. 基于QML2.0的View之PathView
  7. TensorFlow官方教程《Neural Networks and Deep Learning》译(第二章)
  8. 最新完美UI好看币圈系统源码+无BUG/服务器直接打包
  9. nginx 反向代理 socket
  10. Jmeter录制脚本:在IE浏览器中设置代理