📜  unity 在运行时更改材料 - C# (1)

📅  最后修改于: 2023-12-03 15:35:30.749000             🧑  作者: Mango

Unity 在运行时更改材料 - C#

Unity 是一个常用的游戏引擎,使用了 ShaderLab 来渲染材质。在游戏运行的过程中,有时候需要动态地更改材质的属性,比如材质的颜色、纹理等,这时候就需要使用 C# 代码来实现。

材质的基本属性

首先,我们需要了解 Unity 材质的基本属性。每个材质都有一个 Shader,Shader 定义了材质的渲染方式和属性。比如,Unity 自带的 Standard Shader 有以下属性:

  • Color:材质的颜色,是一个 RGBA 值;
  • Main Texture:材质的主纹理,即覆盖在模型表面的纹理;
  • Metallic:金属度,控制金属的亮度;
  • Smoothness:光滑度,控制材质的粗糙程度;
  • Normal Map:法线贴图,用于增强模型表面的细节;
  • ...

每个 Shader 的属性都不相同,我们需要根据具体的 Shader 来更改材质的属性。

更改材质属性

在 Unity 中,可以通过 Material 类来更改材质属性。Material 类表示一个 Unity 材质,可以使用该类的 SetColor、SetTexture 等方法来更改材质的属性。

下面是一个简单的例子,演示如何更改材质颜色:

using UnityEngine;

public class ChangeColor : MonoBehaviour
{
    public Material material;

    void Start()
    {
        material.color = Color.red;
    }
}

在 Start 方法中,我们获取了一个名为 material 的材质,并设置其颜色为红色。

如果我们想要更改其他属性,比如主纹理,可以使用 SetTexture 方法:

using UnityEngine;

public class ChangeTexture : MonoBehaviour
{
    public Material material;
    public Texture texture;

    void Start()
    {
        material.SetTexture("_MainTex", texture);
    }
}

在 Start 方法中,我们获取了一个名为 material 的材质,以及一个名为 texture 的纹理。然后,我们使用 SetTexture 方法来将主纹理设置为 texture。

需要注意的是,SetTexture 方法中的第一个参数必须是 Shader 中定义的属性名称。在 Standard Shader 中,主纹理的属性名称是 "_MainTex"。

总结

在 Unity 中,可以通过 Material 类来动态更改材质属性。每个 Shader 定义了不同的材质属性,我们需要根据具体的需求来进行更改。C# 代码可以在游戏运行时动态地更改材质属性,实现丰富多彩的游戏效果。