1. 程式人生 > >Unity MeshRender中material和sharedmaterial的區別

Unity MeshRender中material和sharedmaterial的區別

建立一個Cube和Sphere,建立一個Material,更改Shader為Unlit/Color,然後將新建立的材質託給Cube和Sphere。

建立一個測試指令碼

Public class Test : Monobehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.F1))
        {
            cube1.GetComponent<Renderer>().material.color=Color.red;

        }
        if (Input.GetKeyDown
(KeyCode.F2)) { cube1.GetComponent<Renderer>().sharedMaterial.color = Color.blue; } if (Input.GetKeyDown(KeyCode.F3)) { cube1.GetComponent<Renderer>().sharedMaterial.color = Color.yellow; } } }

按下F1的時候只改變了Cube的顏色,此時再按下F2還是改變Cube的顏色,再按下F3還是改變Cube的顏色,不管我們怎麼改變此時都是改變Cube的顏色,而Sphere無動於衷。

我們重新執行,先按下F2,此時Cube和Sphere都改變了顏色,我們看看前面建立的材質,顏色也改變了,因為我們使用了sharedMaterial,所有使用這個材質球物體都會被改變,並且改變後的設定將會被儲存在專案工程中。此時我們再次按下F1,改變Cube的顏色,這是我們想看到的,但是我們希望再次按下F3的時候,Cube和Sphere以及前面建立的材質球也改變,可是,只有Cube進行了變化,其他的並沒有,其實測試了這麼多,不難看出原因了。

總結:
1.對於material,我們每一次引用就會生成一個新的material到記憶體中。但是在引用後並不會改變我們專案工程中材質球的原始屬性設定。
2.而對於sharedMaterial,所有使用這個材質球物體都會被改變,並且改變後的設定將會被儲存在專案工程中。
3.如果我們先改變了material,表示生成了一個新的material在記憶體中,此時再使用sharedMaterial對新的material並不起作用。

以上是個人的一些測試理解。

不過不推薦使用sharedMaterial,建議使用material。