• Unity 之Material 类型和 MeshRenderer 组件中的 Materials 之间有一些重要的区别


    文章目录

    在这里插入图片描述

    区别

    Unity中,Material 类型和 MeshRenderer 组件中的 Materials 之间有一些重要的区别。

    1. Material 类型:

      • Material 是 Unity 中用来定义渲染属性的资源。它包含了一系列定义了如何绘制一个对象的属性,比如颜色、纹理、透明度、反射等。
      • Material 可以被分配给一个或多个 GameObject 的 Renderer 组件,以定义它们的外观。
      • Material 在项目中是独立的资源,可以在多个对象之间共享。这意味着,如果你修改一个 Material,所有使用该 Material 的对象都会受到影响。
      • 通过脚本,你可以访问和修改一个对象的 Material 属性,以实现动态的外观变化。
    2. MeshRenderer 中的 Materials:

      • MeshRenderer 是 Unity 中的一个组件,通常附加在需要渲染的 GameObject 上。它负责将对象的几何形状(Mesh)和材质属性(Material)传递给渲染管线,以进行绘制。
      • MeshRenderer 可以在其 Materials 数组中包含多个 Material。这允许一个对象具有多个不同的外观,每个外观都由一个单独的 Material 定义。
      • 使用 Materials 数组,你可以为一个对象的不同部分(例如,前部分和后部分)应用不同的材质。
      • 在运行时,你可以通过脚本访问和修改 MeshRenderer 中的 Materials 数组,以实现材质切换、混合和动态变化。

    总结来说,Material 是定义渲染属性的资源,可以在多个对象之间共享,而 MeshRenderer 中的 Materials 数组用于指定一个对象的外观,允许一个对象具有多个不同的材质。这两者在 Unity 中合作以定义游戏对象的外观。

    代码例子

    当涉及到 Unity 中的 Material 和 MeshRenderer 中的 Materials 时,以下是一个示例代码,以及相应的注释来详细介绍它们之间的联系和差异:

    using UnityEngine;
    
    public class MaterialAndMeshRendererExample : MonoBehaviour
    {
        // 定义两个不同的材质
        public Material material1;
        public Material material2;
    
        // 引用 MeshRenderer 组件
        private MeshRenderer meshRenderer;
    
        void Start()
        {
            // 获取 GameObject 上的 MeshRenderer 组件
            meshRenderer = GetComponent<MeshRenderer>();
    
            // 指定第一个材质到 MeshRenderer 中的 Materials 数组
            meshRenderer.materials = new Material[] { material1 };
    
            // 修改第一个材质的颜色
            material1.color = Color.red;
    
            // 输出 MeshRenderer 中的 Materials 数组长度
            Debug.Log("Materials Array Length: " + meshRenderer.materials.Length); // 输出 1
    
            // 添加第二个材质到 MeshRenderer 中的 Materials 数组
            meshRenderer.materials = new Material[] { material1, material2 };
    
            // 修改第二个材质的颜色
            material2.color = Color.blue;
    
            // 输出 MeshRenderer 中的 Materials 数组长度
            Debug.Log("Materials Array Length: " + meshRenderer.materials.Length); // 输出 2
        }
    
        void Update()
        {
            // 在 Update 方法中,我们可以动态修改材质属性
            // 例如,在每一帧中,将第一个材质的颜色从红色渐变到绿色
            float lerpValue = Mathf.PingPong(Time.time, 1f); // 生成 0 到 1 之间的插值值
            material1.color = Color.Lerp(Color.red, Color.green, lerpValue);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    上述代码演示了 Material 和 MeshRenderer 中的 Materials 的联系和差异:

    1. 我们首先定义了两个不同的 Material,material1material2

    2. Start 方法中,我们获取了当前 GameObject 上的 MeshRenderer 组件。

    3. 我们将 material1 分配给 MeshRenderer 的 Materials 数组。这样,这个对象将只使用 material1

    4. 我们输出了 MeshRenderer 中的 Materials 数组长度,它是 1,因为我们只有一个材质。

    5. 然后,我们将 material2 添加到 MeshRenderer 的 Materials 数组中。现在,这个对象同时使用了两个材质。

    6. 我们再次输出了 MeshRenderer 中的 Materials 数组长度,它是 2。

    7. Update 方法中,我们动态地修改了 material1 的颜色属性,以实现颜色渐变效果。这显示了 Material 可以在运行时动态更改其属性。

    通过这个示例,你可以看到 Material 和 MeshRenderer 中的 Materials 之间的联系和差异。Material 是定义渲染属性的资源,可以在多个对象之间共享,而 MeshRenderer 中的 Materials 数组用于指定一个对象的外观,允许一个对象具有多个不同的材质,并且可以在运行时动态修改。

  • 相关阅读:
    高校社团管理系统的设计与实现
    vue el-upload 以formData传递二进制文件
    尚硅谷大数据项目《在线教育之实时数仓》笔记003
    Opencv项目实战:09 物体尺寸测量
    【图像分类】【深度学习】【Pytorch版本】ResNet模型算法详解
    Nginx 实战教程
    SQL语句创建数据库
    cs夏令营经验分享
    vue3 动态组件
    Compose原理-视图和数据双向绑定的原理
  • 原文地址:https://blog.csdn.net/weixin_74850661/article/details/132747595