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;
// 加载脚本实例时调用 Awake
private void Awake()
{
m_material = GetComponent<Renderer>().material;
}
// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnter
private void OnMouseEnter()
{
m_material.color = Color.red;
}
// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExit
private void OnMouseExit()
{
m_material.color = Color.white;
}
}
通过这种方式直接改变材质球颜色
2. 简单粗暴法2
这个和方法1差不多只是修改的方式发生了变化
using UnityEngine;
public class 方法2 : MonoBehaviour
{
private Material m_material;
// 加载脚本实例时调用 Awake
private void Awake()
{
m_material = GetComponent<Renderer>().material;
}
// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnter
private void OnMouseEnter()
{
m_material.SetColor("_Color", Color.red);
}
// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExit
private void OnMouseExit()
{
m_material.SetColor("_Color", Color.white);
}
}
3. 粗中有细法
这个方法的改变方法和1,2相同只是不同的在于得到材质球的方式不同
using UnityEngine;
public class 方法5 : MonoBehaviour
{
private Material m_material;
// 加载脚本实例时调用 Awake
private void Awake()
{
m_material = GetComponent<Renderer>().materials[1];
}
// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnter
private void OnMouseEnter()
{
m_material.SetColor("_Color", Color.red);
}
// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExit
private void OnMouseExit()
{
m_material.SetColor("_Color", Color.white);
}
}
4. 自我复杂法
这个方法就是很稳定,绝对不会出现任何错误,但是很麻烦,会多写很多句
using UnityEngine;
public class 方法6 : MonoBehaviour
{
private Renderer m_renderer;
private Material[] m_arr_material;
// 加载脚本实例时调用 Awake
private void Awake()
{
m_renderer = GetComponent<Renderer>();
m_arr_material = m_renderer.materials;
}
// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnter
private void OnMouseEnter()
{
m_arr_material[1].SetColor("_Color", Color.red);
m_renderer.materials = m_arr_material;
}
// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExit
private 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;
// 加载脚本实例时调用 Awake
private void Awake()
{
m_material = GetComponent<Renderer>().material;
}
// 如果 MonoBehaviour 已启用,则在每一帧都调用 Update
private void Update()
{
m_material.SetColor("_Color", Color.Lerp(m_material.GetColor("_Color"), m_color, Time.deltaTime));
}
// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnter
private void OnMouseEnter()
{
m_color = Color.red;
}
// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExit
private void OnMouseExit()
{
m_color = Color.white;
}
}
2. 使用dotween
using DG.Tweening;
using UnityEngine;
public class 方法3 : MonoBehaviour
{
private Material m_material;
// 加载脚本实例时调用 Awake
private void Awake()
{
m_material = GetComponent<Renderer>().material;
}
// 当鼠标进入 GUIElement 或碰撞器时调用 OnMouseEnter
private void OnMouseEnter()
{
m_material.DOColor(Color.red, 1.0f);
}
// 当鼠标不再停留在 GUIElement 或碰撞器上时调用 OnMouseExit
private void OnMouseExit()
{
m_material.DOColor(Color.white, 1.0f);
}
}
转载:https://blog.csdn.net/JianShengShuaiest/article/details/104520425
查看评论