您好,登錄后才能下訂單哦!
問題描述:
因?yàn)轫?xiàng)目中要進(jìn)行熱更新設(shè)計(jì),所以用unity官方推薦的打包方式assetbundle進(jìn)行打包,打包好了以后再電腦上運(yùn)行正常,但是當(dāng)發(fā)布到android上后發(fā)現(xiàn)偶爾場景背景會(huì)出現(xiàn)空白,多方查找,發(fā)現(xiàn)unity存在使用assetbundle加載資源會(huì)丟失shader的問題。網(wǎng)上找了一些解決方式,測試可用,分享出來。
方案一:(親測可用)
第一步,在將用到的Shader加到Editor->Graphics Settings的Shader列表里再進(jìn)行打包(依賴打包)
第二步,在代碼中給shader再次賦值,代碼如下:
public static void ResetShader(UnityEngine.Object obj)
{
List<Material> listMat = new List<Material>();
listMat.Clear();
if (obj is Material)
{
Material m = obj as Material;
listMat.Add(m);
}
else if (obj is GameObject)
{
GameObject go = obj as GameObject;
Renderer[] rends = go.GetComponentsInChildren<Renderer>();
if (null != rends)
{
foreach (Renderer item in rends)
{
Material[] materialsArr = item.sharedMaterials;
foreach (Material m in materialsArr)
listMat.Add(m);
}
}
}
for (int i = 0; i < listMat.Count; i++)
{
Material m = listMat[i];
if (null == m)
continue;
var shaderName = m.shader.name;
var newShader = Shader.Find(shaderName);
if (newShader != null)
m.shader = newShader;
}
}
經(jīng)過這兩步后,基本可以解決丟shader問題。
方案二:
依賴打包
shader放到Resources文件夾,必須是Resources文件夾里。
方案二是我在網(wǎng)上看到的,其實(shí)方案一用的也是依賴打包,shader雖然沒放到Resources目錄下,不過也沒有再出現(xiàn)丟shader的問題。
我剛才說“基本可以解決”丟shader問題,是因?yàn)檫€有一些情況是沒有解決掉的,如下:
一、spine動(dòng)畫資源
在把spine動(dòng)畫資源進(jìn)行了依賴打包后,發(fā)現(xiàn)總是會(huì)丟失材質(zhì)(shader),使用方案一,方案二都無效,因?yàn)閟pine動(dòng)畫資源是做成prefab的,依賴也都加載了,依賴加載順序也沒錯(cuò),關(guān)鍵是丟材質(zhì)(shader)的情況不是必現(xiàn),所以就很難查到問題。無奈只好只打包spine動(dòng)畫資源原文件(.json,.atlas,.png三個(gè)文件),然后在代碼中創(chuàng)建spine組件,初始化。不過問題又來了,那就是創(chuàng)建spine組件很耗時(shí),加載方式也只能改為預(yù)加載,雖然這個(gè)解決方式并不滿意,但因?yàn)闆]有找到更好的方式,就暫時(shí)先這樣。至于,spine動(dòng)畫在代碼中創(chuàng)建的方法,會(huì)另寫博文與大家分享。
二、NGUI的圖集有時(shí)會(huì)丟材質(zhì)(shader)
這個(gè)現(xiàn)象也不是必現(xiàn)的,在電腦上一切正常,但發(fā)布到android上就有一定的幾率會(huì)丟材質(zhì)(shader),試了幾次都不行,就把圖集放到了Resoures目錄下,用Resoures.Load進(jìn)行加載。
在此也發(fā)一下求助,有能解決這兩個(gè)問題的好方案,還請(qǐng)您不吝賜教!先行謝過。
歡迎大家評(píng)論指正,很樂意與大家一同成長。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。