Unity_Renderer 中(sharedMaterial 和Miaterial)

Posted roz-001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 

 

 

 

 

以上是关于Unity_Renderer 中(sharedMaterial 和Miaterial)的主要内容,如果未能解决你的问题,请参考以下文章

新版测试中

初一下期中试卷

c++理解协程05

Access中VBA中excel文件中的VLookup

Groovy闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )

在 Django 中,根据模型中其他字段中选择的值删除选择字段下拉列表中的选项