Unity_Renderer 中(sharedMaterial 和Miaterial)

sharedMaterial 和Miaterial 简介:

我们在使用unity引擎的时候 ,有时候需要去修改某个物体上的material,在Unity的Renderer类里,提供了两个方法接口供我们使用。

Renderer,material 和 Renderer.sharedMaterial

如果你需要修改模型材质的颜色,或者是修改材质shader的一些属性,通常情况是用获取模型的Renderer组件,然后获取他的material属性。

举一个简单的例子,然后修改颜色或者直接更换shader

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

     Render可以使用material或者是sharedMaterial两个属性。

11 Renderer render; 23 render.material; 35 render.sharedMaterial;

     这两个属性的用法是一样的,但是从效率上来说最好用sharedMaterial ,他是共享材质,无论如何操作材质的属性(如更换颜色或更换shader),内存中智慧占用一份。但是如果要是用material的话,每次更换属性的时候unity就会自动new一份新的material 作用于它。他直到application.loadLevel()或者Resources.UnLoadUnuseAssets()的时候才会释放内存,所以material就有可能会造成内存泄漏,那么我们干脆就不要使用它。

但是在代码中直接使用render.sharedMaterial的话,你会发现在编辑器开发模式下,运行一会游戏本地的 .material文件凡是修改了的都变化了,如果这些文件都在SVN管理中心,那么他们都会变成红色感叹号了,表示文件以及被修改。那样就危险了,一不小心 上传了怎么办。为了解决这个问题,可以用一个简单方法,每次获取material的时候根据平台而定。

11 public static Material GetMaterial(Renderer render) 22 { 33 #if UNITY_EDITOR 44 return render.material; 55 #else 66 return render.sharedMaterial; 77 #endif 88 }

这样 就不会担心本地文件变化了。

总结 :

    sharedMaterial 和Miaterial 这二者的区别主要在内存管理上,当然主要情况还是要因平台或编程环境而定。

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

    附 带上简单的UV纹理动画

1 1 using UnityEngine; 2 2 using System.Collections; 3 3 4 4 public class ExampleClass : MonoBehaviour { 5 5 public float scrollSpeed = 0.5F; 6 6 public Renderer rend; 7 7 void Start() { 8 8 rend = GetComponent<Renderer>(); 9 9 } 1010 void Update() { 1111 float offset = Time.time * scrollSpeed; 1212 rend.material.mainTextureOffset = new Vector2(offset, 0); 1313 } 1414 }
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )