前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简简单单修改游戏对象的材质颜色,一起来看看(Unity3D)

简简单单修改游戏对象的材质颜色,一起来看看(Unity3D)

作者头像
恬静的小魔龙
发布2022-08-07 09:08:47
2.2K0
发布2022-08-07 09:08:47
举报
文章被收录于专栏:Unity3DUnity3D

一、前言

前段时间比较忙,好久没更新博客了,感觉技术都下降了,还是要坚持输出呀。 孔子曰:"学而不思则罔,思而不学则殆",不能光学习,还要学会思考,要能用起来。 将自己学到的东西记录下来,这样会让学习更加有效。

二、修改游戏对象的材质颜色

2.1 支持修改的材质

首先,你的材质要支持颜色渲染通道,如果都没有颜色通道,再怎么改变都没有用的。

默认的Standard是支持颜色通道的:

在这里插入图片描述
在这里插入图片描述

其他支持颜色通道的Shader:

Sprites/Default

在这里插入图片描述
在这里插入图片描述

Sprites/Diffuse

在这里插入图片描述
在这里插入图片描述

Unlit/Color

在这里插入图片描述
在这里插入图片描述

Legacy Shaders/Diffuse

在这里插入图片描述
在这里插入图片描述

2.2 修改材质颜色代码

如果游戏对象只有一个材质球,可以这么写:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
using UnityEngine;

public class test1 : MonoBehaviour
{
    public GameObject m_Cube;
    void Start()
    {
        m_Cube.GetComponent<MeshRenderer>().material.color = Color.red;
    }
}

如果游戏对象有多个材质球,可以这么写:

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
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;
    }
}

也可以直接设置材质球的颜色,但是不推荐:

代码语言:javascript
复制
using UnityEngine;

public class test1 : MonoBehaviour
{
    public Material m_Material;
    void Start()
    {
        m_Material.color = Color.red;
    }
}

因为这样写会直接修改资源中材质球的颜色,会导致所有使用这个材质球的物体都改变颜色,而且是永久性修改,在程序结束也不会修改回来。

思考

那么为什么,使用GetComponent().material.color就没有问题呢:

代码语言:javascript
复制
using UnityEngine;

public class test1 : MonoBehaviour
{
    public GameObject m_Cube;
    void Start()
    {
        m_Cube.GetComponent<MeshRenderer>().material.color = Color.red;
    }
}

因为Unity在我们使用GetComponent().material.color的时候做了一些事情:

在这里插入图片描述
在这里插入图片描述

没错,这是一个实例化的材质球,保存在内存中,程序结束,这个材质球也会被销毁了,就不会改变资源中材质球的颜色了,也不会影响其他使用这个材质球的物体了。

三、Shader为Particles时修改材质颜色

在这里插入图片描述
在这里插入图片描述

当Shader为Particles时可以这么修改材质颜色:

代码语言:javascript
复制
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);
    }
}

四、修改材质的透明值

这么写是不对的:

在这里插入图片描述
在这里插入图片描述

可以这么写:

代码语言:javascript
复制
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);
    }
}
在这里插入图片描述
在这里插入图片描述

也可以这么写:

代码语言:javascript
复制
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;
    }
}
在这里插入图片描述
在这里插入图片描述

效果一样。

结束,谢谢观看。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、修改游戏对象的材质颜色
    • 2.1 支持修改的材质
      • 2.2 修改材质颜色代码
      • 三、Shader为Particles时修改材质颜色
      • 四、修改材质的透明值
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档