Unity3D內存泄漏Render的sharedMaterial和material

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這一步已經報內存泄漏了,所以這個問題暫時就不知道怎麼辦了,如果有大牛解決了此問題,還望不吝賜教。

參考:http://www.jianshu.com/p/ababf547d992

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

發佈了69 篇原創文章 · 獲贊 29 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章