Unity中的内置资源以及打AB包注意事项
关于Unity中的内置资源
内置资源主要分为两个来源:Resources/unity_builtin_extra
和Library/unity default resources
可以通过代码得到资源类型
1 | var assets = AssetDatabase.LoadAllAssetsAtPath("Resources/unity_builtin_extra"); |
Resources/unity_builtin_extra下资源对应的guid始终为0000000000000000f000000000000000。
Library/unity default resources下资源对应的guid始终为0000000000000000e000000000000000。
Library/unity default resources
这里面资源是固定的,是一些shader和GUISkin(IMGUI资源),Arial字体和一些Unity内部texture(如logo,development标记..)
等等,虽以Library
开头但是在library文件夹中找不到它,这个文件一定会全部打进包里,unity版本不同可能里面的也资源不同
。
打包AssetBundle
如果某些assetbundle包中包含了这些资源将不会的打进ab包中, 即永远不会造成ab资源冗余
,很像unity自己打了一个ab包
由上图可见,我在Text组件中用了Arial字体属于unity default resources
,不会打进ab包。同样我在gameobject_1中用了一个脚本引用了GUISkin也是没有打进ab包的(只是打了一个mono脚本)
Resources/unity_builtin_extra
里面包括资源:Shader,Material,Texture(都是UGUI的图,看文章开头图,这些图原格式都是psd,具体可以ugui源代码)以及Sprite(UGUI的精灵图),内置资源在发布时是会按需裁剪的,影响他的大小因素(现在所知),来自Project Setting->Graphics->Always included shaders的size大小
通过解包来看里面的资源(手机版暂没发现),里面都是shader
打包AssetBundle
这里面的资源不会剥离,而是会随着ab包打进,如果有两个uiprefab的ab包,都引用了其中的Sprite资源(例如Background),那么他会打进两个ab中,会造成冗余,需要注意
参考
Unity实践—Unity 内置资源独立打包 - 知乎 (zhihu.com)
Unity冗余资源全面优化 - 知乎 (zhihu.com)
Unity 5.x AssetBundle零冗余解决方案 - UWA问答 | 博客 | 游戏及VR应用性能优化记录分享 | 侑虎科技 (uwa4d.com)