Renderer.material
每一次引用就会生成一个新的material到内存中,因此是独立的,多个物体的相同材质间不会影响,但是会内存泄漏,可以通过Resources.UnloadUnusedAssets释放。
Renderer.sharedMaterial
当我们改变Renderer.sharedMaterial的时候,所有使用这个材质球物体都会被改变,并且改变后的设置将会被保存在项目工程中,即还影响了本地.mat文件。
官方并不推荐使用这个属性去修改material。
雨松MOMO的解决方式如下,但是就像上面说的,会影响到所有使用这个材质的物体。
public static Material GetMaterial(Renderer render)
{
#if UNITY_EDITOR
return render.material;
#else
return render.sharedMaterial;
#endif
}
还有一种方式是说第一次用material,之后都改用shareMaterial,这样可以避免修改属性影响其他的物体(因为第一次material已经新建了一个),又能避免内存泄漏(shareMaterial),但是经过的测试,发现然并卵,因为在render.material这一步已经报内存泄漏了,所以这个问题暂时就不知道怎么办了,如果有大牛解决了此问题,还望不吝赐教。