Material和SharedMaterial的区别

Posted littleyellowdoggy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Material和SharedMaterial的区别相关的知识,希望对你有一定的参考价值。

简单概括

Material:使用的时候,如果有其他物体同时在占用这一份,则会复制一份instance出来,只改变对应的这一份。会留存在内存中,不会销毁。unloadunuse会销毁。

SharedMaterial:改变参数的时候,所有共用的都会改变。

修改对应的接口,在Editor下使用material,其他情况改为SharedMaterial。renderer.GetShareMaterial.

public Material material  
get
if (_sharedMaterial ~= _material)
_material = new Material (_sharedMaterial);
_sharedMaterial = _material;


return _material;


set
_sharedMaterial = value;



public Material sharedMaterial

get
return _sharedMaterial;


set
_sharedMaterial = value;

使用 material 时的内存泄漏问题

每一次引用 Renderer.material 的时候,都会生成一个新的 material 到内存中去,销毁物体的时候需要我们手动去销毁该material,否则会一直存在内存中。

官方文档说:

This function automatically instantiates the materials and makes them unique to this renderer. It is your responsibility to destroy the materials when the game object is being destroyed. Resources.UnloadUnusedAssets also destroys the materials but it is usually only called when loading a new level.

此方法自动实例化该材质并且使其成为该渲染器独有的材质。当该游戏物体被删除时,你应该手动删除该材质。当替换场景调用 Resources.UnloadUnusedAssets 也可以删除该材质。

网上的解决方案如下:

http://www.xuanyusong.com/archives/2530

编辑器下使用 material, 其他平台使用 sharedMaterial

public static Material GetMaterial(Renderer render) 
 
#if UNITY_EDITOR 
    return render.material; 
#else 
    return render.sharedMaterial; 
#endif 

 

 

 

 


---------------------
原文:https://blog.csdn.net/david_dai_1108/article/details/71598628
版权声明:本文为博主原创文章,转载请附上博文链接!

以上是关于Material和SharedMaterial的区别的主要内容,如果未能解决你的问题,请参考以下文章

关于material和sharedMaterial的问题

Unity --- sharedMaterial material

Unity_Renderer 中(sharedMaterial 和Miaterial)

unity, 不要change Default sharedMaterial

Unity中sharedMaterials 和 materials

以下unity3d的C#代码是啥意思?