码迷,mamicode.com
首页 > 其他好文 > 详细

Material和SharedMaterial的区别

时间:2019-06-18 14:29:56      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:and   eve   unique   class   简单   object   lse   版权   edit   

简单概括

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的区别

标签:and   eve   unique   class   简单   object   lse   版权   edit   

原文地址:https://www.cnblogs.com/littleYellowDoggy/p/11044733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!