创建一个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 版权协议,转载请附上原文出处链接和本声明。