如果你需要修改模型材質的顏色,或者是修改材質Shader的一些屬性, 通常情況是用獲取模型的Renderer組件,然後獲取它的material屬性。
舉個簡單的例子,修改顏色或者直接更換shader
material.color = Color.red;
material.shader = Resources.Load(“Shader/Alpha-Diffuse”, typeof(Shader)) as Shader;
Render可以使用material或者是sharedMaterial兩個屬性。
Renderer render;
render.material;
render.sharedMaterial;
這兩個屬性用法是一樣的,但是從效率上來說最好用sharedMaterial,它是共享材質,無論如何操作材質的屬性(如更換顏色或者更換shader),內存中只會佔用一份。但是如果要是用material的話,每次更換屬性的時候Unity就會自動new一份新的material作用於它。它 直到Application.LoadLevel() 或者Resources.UnloadUnusedAssets();的時候纔會施放內存。所以material就有可能會造成內存泄漏,那麼我們乾脆就不要使用它。
但是在代碼中如果直接用render.sharedMaterial的話,你會發現在編輯器開發模式下,運行一會兒遊戲本地的.material文件凡是修改了的都變化了,如果這些文件都在svn管理中,那麼他們都會變成紅歎號,表示文件已經被修改。這樣太危險了,一不小心上傳了怎麼辦。 爲了解決這個問題,可以用一個簡單的方法,每次獲取material的時候根據平臺而定。
- public static Material GetMaterial(Renderer render)
- {
- #if UNITY_EDITOR
- return render.material;
- #else
- return render.sharedMaterial;
- #endif
- }
這樣就不用擔心本地文件變化了。
附帶上簡單的UV紋理動畫
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public float scrollSpeed = 0.5F;
public Renderer rend;
void Start() {
rend = GetComponent<Renderer>();
}
void Update() {
float offset = Time.time * scrollSpeed;
rend.material.mainTextureOffset = new Vector2(offset, 0);
}
}