cube01.GetComponent<Renderer> ().material.color = Color.black;
上面的代码在执行的时候其实是这样的一个过程:
Material lastMat = cube01.GetComponent<Renderer> ().material;
Material m = Instantiate(lastMat) as Material;
cube01.GetComponent<Renderer> ().material = m;
m.color = Color.black;
也就是说我们每一次引用就会生成一个新的material到内存中。但是在引用后并不会改变我们项目工程中材质球的原始属性设置。
关于这段话,原理代码部分没怎么看明白,作者的意思应该是内部会首先拿到sharedMaterial然后Copy这个材质之后使用该材质副本作为自己的材质。然后每次的引用都会建立Copy一份现有的材质。
不知道理解的对不对,如果是这样的话我不太认同。
我认为Unity不会每次引用都copy一次新的材质出来,这样做没有任何意义,干耗费内存资源。Unity应该是判断这个GameObject渲染使用材质是不是共享材质,如果是的话,建立一份自己的,之后再获取material直接返回这份自己的材质
Unity3D中Material与ShareMaterial引用的区别我们在使用Unity引擎的时候,有时候需要去修改某个物体上的Material,在Unity的Renderer类里,提供了两个方法接口供我们使用。 Renderer.mater...