Unity MeshRender中material和sharedmaterial的区别

  • Post author:
  • Post category:其他


创建一个Cube和Sphere,创建一个Material,更改Shader为Unlit/Color,然后将新创建的材质托给Cube和Sphere。

创建一个测试脚本

Public class Test : Monobehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.F1))
        {
            cube1.GetComponent<Renderer>().material.color=Color.red;

        }
        if (Input.GetKeyDown(KeyCode.F2))
        {
            cube1.GetComponent<Renderer>().sharedMaterial.color = Color.blue;
        }

        if (Input.GetKeyDown(KeyCode.F3))
        {
            cube1.GetComponent<Renderer>().sharedMaterial.color = Color.yellow;
        }
    }
}

按下F1的时候只改变了Cube的颜色,此时再按下F2还是改变Cube的颜色,再按下F3还是改变Cube的颜色,不管我们怎么改变此时都是改变Cube的颜色,而Sphere无动于衷。

我们重新运行,先按下F2,此时Cube和Sphere都改变了颜色,我们看看前面创建的材质,颜色也改变了,因为我们使用了sharedMaterial,所有使用这个材质球物体都会被改变,并且改变后的设置将会被保存在项目工程中。此时我们再次按下F1,改变Cube的颜色,这是我们想看到的,但是我们希望再次按下F3的时候,Cube和Sphere以及前面创建的材质球也改变,可是,只有Cube进行了变化,其他的并没有,其实测试了这么多,不难看出原因了。

总结:

1.对于material,我们每一次引用就会生成一个新的material到内存中。但是在引用后并不会改变我们项目工程中材质球的原始属性设置。

2.而对于sharedMaterial,所有使用这个材质球物体都会被改变,并且改变后的设置将会被保存在项目工程中。

3.如果我们先改变了material,表示生成了一个新的material在内存中,此时再使用sharedMaterial对新的material并不起作用。

以上是个人的一些测试理解。

不过不推荐使用sharedMaterial,建议使用material。



版权声明:本文为Jason_520原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。