材質球合併,分以下幾步走,首先我們討論普通的meshrenderer的材質球合併,然後再討論skinnedmeshrenderer的材質球合併。
普通的meshrenderer的材質球合併:
1.合併所有材質球所攜帶的貼圖,新建乙個材質球,並把合併好的貼圖賦予新的材質球。
2.記錄下每個被合併的貼圖所處於新貼圖的rect,用乙個rect陣列存下來。
3.合併網格,並把需要合併的各個網格的uv,根據第2步得到的rect刷一遍。
4.把新的材質球賦予合併好的網格,此時就只占有1個drawcall了。
下面是關鍵**:
void combinemesh()
materials[i] = mrchildren[i].sharedmaterial
; texture2d tx = materials[i].gettexture("_maintex") as texture2d;
texture2d tx2d = new texture2d(tx.width, tx.height, textureformat.argb32, false);
tx2d.setpixels(tx.getpixels(0, 0, tx.width, tx.height));
textures[i] = tx2d;
}material materialnew = new material(materials[0].shader);
materialnew.copypropertiesfrommaterial(materials[0]);
mrself.sharedmaterial = materialnew;
texture2d texture = new texture2d(1024, 1024);
materialnew.settexture("_maintex", texture);
rect rects = texture.packtextures(textures, 10, 1024);
for (int i = 0
; i < mfchildren.length; i++)
rect rect = rects[i];
mesh meshcombine = mfchildren[i].mesh
; vector2 uvs = new vector2[meshcombine.uv
.length];
//把網格的uv根據貼圖的rect刷一遍
for (int j = 0
; j < uvs.length; j++)
meshcombine.uv = uvs;
combine[i].mesh = meshcombine;
combine[i].transform = mfchildren[i].transform
.localtoworldmatrix
; mfchildren[i].gameobject
.setactive(false);
}mesh newmesh = new mesh();
newmesh.combinemeshes(combine, true,true);//合併網格
mfself.mesh = newmesh;
}
Unity實現動態修改模型材質球
一 定義需要替換的材質球 且載入該材質球 private material highlightmat 實現閃爍高亮效果材質球 highlightmat resources.load prefabs highlightmat gradient hightblue as material 二 編寫修改材...
Unity中材質球無法修改問題的解決
今天在使用unity18過程中,發現有些情況下匯入材質會出現材質 貼圖丟失的情況。並且材質無法更改。網上有不少相似的問題但都沒有解決清楚。於是決定寫一小段詳細說明一下此問題的解決方法。我們發現材質球沒有問題,而是材質球上的貼圖出現了丟失,但材質球並不能修改 17中貌似沒有這個問題 這種情況是mate...
Unity MeshRender更換材質球方法
自csdn布萊克漢 幹活的時候遇到了這樣乙個問題,當要用 給這個模型換材質球的時候,單獨獲取renderer元件裡的materials陣列裡的materials 1 或者materials 2 是無法改變材質球的,此時採用以下兩種方法可以實現功能 1.getcomponent material.co...