今天在做一个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"));
}
切换前
切换后
撒花!*★,°*:.☆\( ̄▽ ̄)/$:*.°★* 。