Image组件修改材质不生效的解决办法

今天在做一个shader的时候,想说通过替换shader内的两张材质来实现图片切换的效果

代码如下

void SetTextrue() {
        
        int cur = count;

        mat.SetTexture("_MainTex", Textures[cur++]);
        if (cur >= Textures.Length) {
            cur = 0;
        }
        mat.SetTexture("_MainTex2", Textures[cur]);
        count++; 
        if (count >= Textures.Length) {
            count = 0;
        }
}

切换前:

切换后

结果发现在Image上的图片,无论我怎么切换Image内的材质球内的材质,都没有效果,甚至所渲染的材质,根本就不存在于材质球内。但是同一个材质球在MeshRender却可以正确显示(下面那个倒着的Cube)

 

之后查了很久的文档之后,发现UGUI上都会有一个CanvasRender组件,Unity对CanvasRender的定义是这样的

A component that will render to the screen after all normal rendering has completed when attached to a Canvas. Designed for GUI application.

这个才是UGUI能显示在视图上的根源。

于是我就修改了一下代码,设置CanvasRedner的材质,发现图片正常切换了。

代码就在上面的基础上多加了一行

void SetTextrue() {
        
        int cur = count;
        mat.EnableKeyword ("_NORMALMAP");
        mat.SetTexture("_MainTex", Textures[cur++]);
        if (cur >= Textures.Length) {
            cur = 0;
        }

        mat.EnableKeyword("_NORMALMAP");
        
        mat.SetTexture("_MainTex2", Textures[cur]);
        count++; 
        if (count >= Textures.Length) {
            count = 0;
        }
        //通过修改CanvasRenderer的材质,达到修改Image的效果
        canvasRenderer.SetTexture( mat.GetTexture("_MainTex"));
    }

切换前

切换后

撒花!*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章