【Unity3D日常开发】(三十一)Unity3D中修改游戏对象的材质颜色
推荐阅读
一、前言
前段时间比较忙,好久没更新博客了,感觉技术都下降了,还是要坚持输出呀。
孔子曰:“学而不思则罔,思而不学则殆”,不能光学习,还要学会思考,要能用起来。
将自己学到的东西记录下来,这样会让学习更加有效。
二、修改游戏对象的材质颜色
2.1 支持修改的材质
首先,你的材质要支持颜色渲染通道,如果都没有颜色通道,再怎么改变都没有用的。
默认的Standard是支持颜色通道的:
其他支持颜色通道的Shader:
Sprites/Default
Sprites/Diffuse
Unlit/Color
Legacy Shaders/Diffuse
2.2 修改材质颜色代码
如果游戏对象只有一个材质球,可以这么写:
using UnityEngine;
public class test1 : MonoBehaviour
{
public GameObject m_Cube;
void Start()
{
m_Cube.GetComponent<MeshRenderer>().material.color = Color.red;
}
}
如果游戏对象有多个材质球,可以这么写:
using UnityEngine;
public class test1 : MonoBehaviour
{
public GameObject m_Cube;
void Start()
{
m_Cube.GetComponent<MeshRenderer>().materials[0].color = Color.red;
m_Cube.GetComponent<MeshRenderer>().materials[1].color = Color.blue;
}
}
也可以直接设置材质球的颜色,但是不推荐:
using UnityEngine;
public class test1 : MonoBehaviour
{
public Material m_Material;
void Start()
{
m_Material.color = Color.red;
}
}
因为这样写会直接修改资源中材质球的颜色,会导致所有使用这个材质球的物体都改变颜色,而且是永久性修改,在程序结束也不会修改回来。
思考
那么为什么,使用GetComponent<MeshRenderer>().material.color就没有问题呢:
using UnityEngine;
public class test1 : MonoBehaviour
{
public GameObject m_Cube;
void Start()
{
m_Cube.GetComponent<MeshRenderer>().material.color = Color.red;
}
}
因为Unity在我们使用GetComponent<MeshRenderer>().material.color的时候做了一些事情:
没错,这是一个实例化的材质球,保存在内存中,程序结束,这个材质球也会被销毁了,就不会改变资源中材质球的颜色了,也不会影响其他使用这个材质球的物体了。
三、Shader为Particles时修改材质颜色
当Shader为Particles时可以这么修改材质颜色:
using UnityEngine;
public class test1 : MonoBehaviour
{
public GameObject m_Cube;
void Start()
{
Color color = new Color(1f, 0f, 0f, 1f);
m_Cube.GetComponent<MeshRenderer>().material.SetColor("_TintColor", color);
}
}
四、修改材质的透明值
这么写是不对的:
可以这么写:
using UnityEngine;
public class test1 : MonoBehaviour
{
public GameObject m_Cube;
void Start()
{
m_Cube.GetComponent<MeshRenderer>().material.color = new Color(1,0,0,0.5f);
}
}
也可以这么写:
using UnityEngine;
public class test1 : MonoBehaviour
{
public GameObject m_Cube;
void Start()
{
Color c = m_Cube.GetComponent<MeshRenderer>().material.color;
c.a = 0.4f;
m_Cube.GetComponent<MeshRenderer>().material.color = c;
}
}
效果一样。
结束,谢谢观看。
- 点赞
- 收藏
- 关注作者
评论(0)