Unity_Renderer 中(sharedMaterial 和Miaterial)


sharedMaterial 和Miaterial 簡介:

   我們在使用unity引擎的時候 ,有時候需要去修改某個物體上的material,在Unity的Renderer類里,提供了兩個方法接口供我們使用。

  Renderer,material 和 Renderer.sharedMaterial 

  如果你需要修改模型材質的顏色,或者是修改材質shader的一些屬性,通常情況是用獲取模型的Renderer組件,然后獲取他的material屬性。

  舉一個簡單的例子,然后修改顏色或者直接更換shader

  

1 material.color = Color.red; 2 material.shader = Resources.Load(“Shader/Alpha-Diffuse”, typeof(Shader)) as Shader;

 

     Render可以使用material或者是sharedMaterial兩個屬性。

1 Renderer render;
3 render.material;
5 render.sharedMaterial;

     這兩個屬性的用法是一樣的,但是從效率上來說最好用sharedMaterial ,他是共享材質,無論如何操作材質的屬性(如更換顏色或更換shader),內存中智慧占用一份。但是如果要是用material的話,每次更換屬性的時候unity就會自動new一份新的material 作用於它。他直到application.loadLevel()或者Resources.UnLoadUnuseAssets()的時候才會釋放內存,所以material就有可能會造成內存泄漏那么我們干脆就不要使用它。

   但是在代碼中直接使用render.sharedMaterial的話,你會發現在編輯器開發模式下,運行一會游戲本地的 .material文件凡是修改了的都變化了,如果這些文件都在SVN管理中心,那么他們都會變成紅色感嘆號了,表示文件以及被修改。那樣就危險了,一不小心 上傳了怎么辦。為了解決這個問題,可以用一個簡單方法,每次獲取material的時候根據平台而定。

     

1  public static Material GetMaterial(Renderer render) 2 { 3     #if UNITY_EDITOR  
4         return render.material; 5     #else  
6         return render.sharedMaterial; 7     #endif  
8 } 

    這樣 就不會擔心本地文件變化了。

   

總結 :

    sharedMaterial 和Miaterial 這二者的區別主要在內存管理上,當然主要情況還是要因平台或編程環境而定。

 

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    附 帶上簡單的UV紋理動畫

 1 using UnityEngine;  2 using System.Collections;  3 
 4 public class ExampleClass : MonoBehaviour {  5     public float scrollSpeed = 0.5F;  6     public Renderer rend;  7     void Start() {  8         rend = GetComponent<Renderer>();  9  } 10     void Update() { 11         float offset = Time.time * scrollSpeed; 12         rend.material.mainTextureOffset = new Vector2(offset, 0); 13  } 14 }

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM