Unity MeshRender中material和sharedmaterial的区别
2017-02-10 14:08
991 查看
创建一个Cube和Sphere,创建一个Material,更改Shader为Unlit/Color,然后将新创建的材质托给Cube和Sphere。
创建一个测试脚本
按下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。
创建一个测试脚本
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。
相关文章推荐
- unity, GetComponent<MeshRenderer>().sharedMaterial 与 GetComponent<MeshRenderer>().material
- unity换装,SkinnedMeshRender
- Unity修改Particles Render Material(Unity3D开发之二十三)
- material与sharedMaterial的区别
- Mesh中 material 和 sharedMaterial 的区别及内部实现的推断
- material与sharedMaterial的区别
- Unity修改Particles Render Material(Unity3D开发之二十三)
- Unity3D Mesh小课堂(四)MeshRenderer的material和sharedMaterial
- unity meshrender理解
- Unity中的摄像机camera的depth属性与Render Queue的区别
- 【Unity3D游戏开发】material与sharedMaterial的区别 (三八)
- Unity SpriteRender 和Image的区别
- MVC 中 Html.RenderPartial(&quot;&quot;)与Html.Partial(&quot;&quot;)区别
- MVC 中Html.RenderPartial与Html.RenderAction 和 Html.Partial 区别{转} (自定义控件如果使用,可以使用Html.RenderPartial与Html.RenderAction )
- Unity 几个Mesh特效的例子
- render 与 redirect_to 的区别
- 【转】ASP.NET MVC 中 Html.RenderPartial("")与Html.Partial("")区别
- HTML.RenderAction和HTML.RenderPartial的区别
- MVC 中Html.RenderPartial与Html.RenderAction 和 Html.Partial 区别{转}
- Html.RenderPartial与Html.RenderAction的区别