cube01.GetComponent<Renderer> ().material.color = Color.black;
上面的代碼在執(zhí)行的時候其實是這樣的一個過程:
Material lastMat = cube01.GetComponent<Renderer> ().material;
Material m = Instantiate(lastMat) as Material;
cube01.GetComponent<Renderer> ().material = m;
m.color = Color.black;
也就是說我們每一次引用就會生成一個新的material到內(nèi)存中。但是在引用后并不會改變我們項目工程中材質(zhì)球的原始屬性設(shè)置。
關(guān)于這段話,原理代碼部分沒怎么看明白,作者的意思應(yīng)該是內(nèi)部會首先拿到sharedMaterial然后Copy這個材質(zhì)之后使用該材質(zhì)副本作為自己的材質(zhì)。然后每次的引用都會建立Copy一份現(xiàn)有的材質(zhì)。
不知道理解的對不對,如果是這樣的話我不太認(rèn)同。
我認(rèn)為Unity不會每次引用都copy一次新的材質(zhì)出來,這樣做沒有任何意義,干耗費內(nèi)存資源。Unity應(yīng)該是判斷這個GameObject渲染使用材質(zhì)是不是共享材質(zhì),如果是的話,建立一份自己的,之后再獲取material直接返回這份自己的材質(zhì)
Unity3D中Material與ShareMaterial引用的區(qū)別我們在使用Unity引擎的時候,有時候需要去修改某個物體上的Material,在Unity的Renderer類里,提供了兩個方法接口供我們使用。 Renderer.mater...