Unity图集打包
Unity圖集打包
- 解析不同的精靈圖集情形
Include in Build:控制是否參與資源打包
1.正常Sprite與圖集依賴(一個(gè)sprite只能被一個(gè)圖集依賴,不存在公共依賴)
當(dāng)啟用Include in Build時(shí):
Prefab包(依賴a8圖集):圖集被打入a81p資源包
Prefab包(依賴a8圖集):圖集被打入a8p資源包
上圖圖片資源被分成多分資源打入prefab資源包
2)圖集被打包:形成資源包間的依賴,圖集和sprite將會(huì)被打一份,所有prefab資源包都依賴這份圖集資源包。
圖集包
?
Prefab包:
從上面三張圖可以看出Prefab沒有打入圖片資源,只有圖集腳本和sprete腳本被打入
當(dāng)禁用Include in Build時(shí):
1)圖集不被打包:圖集和sprite和資源圖片將不會(huì)跟隨預(yù)制體一起打入prefab,此時(shí)資源加載將不會(huì)有圖集。要想正常,必須圖集打包。使用SpriteManager綁定主動(dòng)加載。
2)圖集被打包:形成資源包間的依賴,圖集和sprite將會(huì)被打一份,所有prefab資源包都依賴這份圖集資源包。
當(dāng)禁用Include Build時(shí),圖集不論是打包還是不打包都如上圖。圖集腳本和圖片資源都不會(huì)打入包
資源關(guān)系 ?
圖集依賴,下圖黃色
a1a4依賴1.pug,4.png;
a4a5a6依賴4.png,5.pug,6.png
預(yù)制體依賴,下圖綠色
a1p依賴a1a4中的1.png
a4p依賴a1a4和a4a5a6中共有的4.png
依賴圖
a1a2a3和a1a4有共同的依賴資源4.png
當(dāng)啟用Include in Build時(shí):
a1p預(yù)制體資源關(guān)系如下
上圖 a1p依賴a1a4圖集自有的圖片1.png,而a1a4 ?和 a4a5a6又有公共依賴的圖片4.png,形成鏈?zhǔn)介g接依賴關(guān)系。導(dǎo)致a4a5a6和a1a4所有依賴的圖片資源都將會(huì)跟隨預(yù)制體打入資源包。 同時(shí)a4a5a6和a1a4共同依賴4.png。會(huì)形成兩份資源。
a4p預(yù)制體資源關(guān)系如下
上圖如果預(yù)制體依賴圖集共同依賴的資源4.png,資源包將會(huì)選擇其中的一個(gè)圖集打入包中
2)圖集被打包:形成資源包間的依賴,圖集和sprite將會(huì)被打一份,所有prefab資源包都依賴這份圖集資源包。
圖集包
預(yù)制體資源
此時(shí)預(yù)制體資源包只包含a1a4圖集。此時(shí)兩個(gè)圖集雖然把圖片分別打到圖集包里,但是共同依賴的4.png圖片(上圖紅色框資源)被復(fù)制兩份分別打到圖集。這種設(shè)置資源冗余。所以,圖集不能有公共依賴資源
當(dāng)禁用Include in Build時(shí):
?此時(shí)預(yù)制體資源包只包含a1a4圖集。此時(shí)兩個(gè)圖集雖然把圖片分別打到圖集包里,但是共同依賴的4.png圖片(上圖紅色框資源)被復(fù)制兩份分別打到圖集。這種設(shè)置資源冗余。所以,圖集不能有公共依賴資源
Include in Build?功能是控制依賴此圖集的資源是否跟隨此資源打包。
如果禁用 ,圖集不會(huì)計(jì)算到依賴此資源的打包中。開啟后將會(huì)計(jì)算進(jìn)去。
一定要注意的是Include in Build無論是否禁用,當(dāng)兩個(gè)圖集依賴相同的圖片資源時(shí),如果這兩個(gè)圖集分別打包,則這份圖片資源將被復(fù)制兩份分別打入圖集包里。
當(dāng)兩個(gè)圖集依賴相同的圖片資源,且被打在同一個(gè)包里時(shí),被打進(jìn)包里的資源時(shí)分別打包的總和,如下圖。
a4a5a6的資源將會(huì)被生成兩份。因?yàn)楫?dāng)打a1a4時(shí),兩個(gè)圖集有公共依賴,兩個(gè)圖集的所有圖片被打入包,同時(shí)公用資源復(fù)制一份,然后再把a(bǔ)4a5a6在重新打進(jìn)資源包,所以a4a5a6有兩份
所以圖集一定不要有共用資源。
總結(jié):
1.圖集打包時(shí),圖集間一定不要有同一個(gè)依賴的圖片,不然產(chǎn)生多分圖片資源。如果被多個(gè)預(yù)制依賴會(huì)產(chǎn)生更多的冗余資源。
2.圖集一定要打包,已被其他預(yù)制共同依賴而不會(huì)產(chǎn)生多分資源。
3.當(dāng)Include in Build啟用時(shí),如果圖集不被打包,那么打包時(shí)會(huì)根據(jù)依賴此圖集的預(yù)制體的多少生成多分圖集。如果圖集打包就只會(huì)生成一份圖集資源包。
4.當(dāng)Include in Build禁用時(shí),圖集必須打包,圖集資源也是一份。 ?如果圖集不被打包,unity找不到圖集,將無法顯示圖集,還有一種解決辦法就是綁定SpriteAtlasManager,通過Resources.Load()加載圖集(圖集必須在Resources目錄下)。
Include in Build被禁用時(shí)必須使用SpriteAtlasManager.atlasRequested綁定代碼,因?yàn)閳D集和預(yù)制體不會(huì)形成依賴關(guān)系?;蛘咦约壕帉憟D集和預(yù)制體依賴關(guān)系配置
綁定代碼如下
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.U2D;public class assetLoaderTest : MonoBehaviour {public string rootPath = "D:/Assset";// Start is called before the first frame updatevoid Start(){SpriteAtlasManager.atlasRequested += loadAtlas;}void loadAtlas(string name,Action<SpriteAtlas> call){Debug.LogError("=======xx===" + name);AssetBundle atlas = AssetBundle.LoadFromFile(string.Format("{0}/{1}", rootPath, name));//Resources.Load(string.Format("{0}/{1}", rootPath, name));call(atlas.LoadAsset<SpriteAtlas>(name));}}總結(jié)
- 上一篇: 计算机发展15件重大事件(图说)
- 下一篇: c++ 基类和派生类的虚函数表是否为同一