Unity_Renderer(sharedMaterialおよびMiaterial)

4926 ワード

sharedMaterialとMiaterialの概要:
私たちはunityエンジンを使用するとき、ある物体のmaterialを修正する必要があることがあります.UnityのRendererクラスでは、2つの方法インタフェースを提供しています.
Render,material,Render.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の2つのプロパティを使用できます.
1 Renderer render;
3 render.material;
5 render.sharedMaterial;

この2つのアトリビュートの使用方法は同じですが、効率的にはsharedMaterialを使用したほうがいいです.彼は共有マテリアルで、カラーの交換やshaderの交換など、マテリアルのアトリビュートを操作しても、メモリに知恵がかかります.しかし、materialを使用すると、プロパティを交換するたびにunityが自動的に新しいmaterialをnewします.彼はアプリケーションまで...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();
 9     }
10     void Update() {
11         float offset = Time.time * scrollSpeed;
12         rend.material.mainTextureOffset = new Vector2(offset, 0);
13     }
14 }

 
 
 
 
転載先:https://www.cnblogs.com/Roz-001/p/11066081.html