一、前言我们在Unity中对材质进行操作时,会经常用到material和sharedMaterial这两个变量,那么他们到底有什么不同呢,本文对这两个变量进行了简单的分析总结。二、Unity文档说明在Unity文档中是这样介绍这两个变量的从官方文档中我们可以非常清楚的了解到,material是创建了一个新的材质的实例并且赋给这个对象,因此此时修改材质的一些属性并不会影响到源材质,也就不会影响到其他使用同种材质的对象,因为修改的是新的实例;而sharedMaterial获取到的是源材质,如果修改属性会对所有引用这个材质的对象都进行修改。三、实验接下来我们将对两个使用同种材质的对象进行一些操作。现
区别点sharedMaterial表示共享材质,修改共享材质会改变所有使用该材质的物体,并且编辑器中的材质设置也会变material表示材质实例,修改材质仅会改变物体的材质,如果该材质被其他渲染器使用,将克隆该材质用于当前的渲染器每次引用Renderer.material的时候,会生成一个新的material在内存当中,需要注意内存泄漏。销毁物体的时候需要手动销毁material(Destroy(material)),或者在切换场景的时候调用Resources.UnloadUnusedAssets也可以删除该材质。实例化出的Material无法使用Resources.UnloadAsset()
一、materials与sharedMaterials1.1使用上的区别与差异Unity开发时,在C#中通过Renderer取材质操作是非常常见的操作,Renderer有两种常规获取材质的方式:sharedMaterials:可以理解这个就是原始材质,所有使用了同一个材质资源的模型renderer,sharedMaterial相同,修改了sharedMaterials相当于就是修改了资源materials:material这个相当于materialInstance,比如同一个箱子模型实例化两个renderer,sharedMaterial相同,这时候你想让其中一个箱子是红色的,另一个箱子是绿色