您的位置:首页 > 移动开发 > Unity3D

Unity MeshRender中material和sharedmaterial的区别

2017-02-10 14:08 991 查看
创建一个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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: