項目信息:
平台-Android
Unity編輯器版本-2018.2.5f1
狀況1:真機狀況下引用到圖集下的sprite的UI顯示出錯。(圖集被打成AB包且勾選了Include in Build).
在我們的測試下發現了以下兩個解決方案:(當然我覺得第二個最好)
1.在加載相應UI前,將sprite所屬圖集(spriteAtlas)提前加載到內存中。(相當麻煩,你得知道自己的sprite屬於哪個圖集,並且需要相應的一套資源加載的框架)。
2.調用unity提供的回調atlasRequested,手動綁定圖集。(untiy2018以后才提供用協程異步加載圖集)
解決方法有了,我們來測試一下尋找一下造成這個錯誤的原因。
測試記錄:unity2017.3.0f3 (注意:
圖集要刪了重新弄打包,不然改變include in build再次打AB包,AB包跟着上次的來不變)
SpriteAtlas打AB包,並在場景中加載帶sprite引用的UI預制體:
A組:(UnityEditor,不注冊事件)
1.勾選Include in Build , 正常顯示
2.不勾選Include in Build,不顯示,並警告SpriteAtlasManager.atlasRequested wasn't listened to while RGB requested.
B組:(UnityEditor,注冊事件)
1.勾選Include in Build,,正常顯示,但不觸發atlasRequested事件。
2.不勾選Include in Build,正常顯示,並觸發atlasRequested事件。
C組:(Android真機,不注冊事件)
1.勾選Include in Build,不顯示,並警告SpriteAtlasManager.atlasRequested wasn't listened to while RGB requested.(我反復確認了3次,應該是uinty這個版本自己的BUG了)
2.不勾選Include in Build,不顯示,並警告SpriteAtlasManager.atlasRequested wasn't listened to while RGB requested.
D組:(Android真機,注冊事件)
1.勾選Include in Build,正常顯示圖片,仍然加載atlasRequested事件。(反復確認了兩次……)
2.不勾選Include in Build,正常顯示圖片,觸發atlasRequested事件。
總結:
這次測試結果來看,在編輯器下的事件結果(也就是A組和B組)是完全符合Unity官方文檔的。
C組1號 和 D組1號是和官方文檔的結論好像不太一樣。
C組1號勾選了Include in Build居然還是不能正常顯示,不過和我們項目開發中遇到的問題是一樣的。
D組1號也是出乎我意料的,勾選了Include in Build注冊事件,按理說是正常觸發且不觸發事件的,不過在C組1號的基礎上倒是合理,找不到spriteAtlas,於是乎根據事件找到spriteAtlas.
所以C組1號和D組1號其實是一個BUG,那就是android真機上atlas打AB包就算勾了Include in Build也不會找到相關的spriteAtlas(不打AB包還沒試過)。
結論:
所以在Android真機打spriteAtlas上我還是建議:不勾選Include in Build用事件來綁定。
參考網頁:
