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