关于Unity中的内置资源

内置资源主要分为两个来源:Resources/unity_builtin_extraLibrary/unity default resources

image-20240102012629532

image-20240102001507173

可以通过代码得到资源类型

1
2
var assets = AssetDatabase.LoadAllAssetsAtPath("Resources/unity_builtin_extra");
var assets2 = AssetDatabase.LoadAllAssetsAtPath("Library/unity default resources");
  • 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版本不同可能里面的也资源不同

image-20240102000909809

资源

打包AssetBundle

如果某些assetbundle包中包含了这些资源将不会的打进ab包中, 即永远不会造成ab资源冗余,很像unity自己打了一个ab包

7bbaaeda323863e954df35032a0e6d6c

image-20240102003808039

image-20240102003850870

由上图可见,我在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大小

image-20240102004814241

通过解包来看里面的资源(手机版暂没发现),里面都是shader

image-20240102011228983

打包AssetBundle

这里面的资源不会剥离,而是会随着ab包打进,如果有两个uiprefab的ab包,都引用了其中的Sprite资源(例如Background),那么他会打进两个ab中,会造成冗余,需要注意

参考

Unity实践—Unity 内置资源独立打包 - 知乎 (zhihu.com)

Unity冗余资源全面优化 - 知乎 (zhihu.com)

Unity 5.x AssetBundle零冗余解决方案 - UWA问答 | 博客 | 游戏及VR应用性能优化记录分享 | 侑虎科技 (uwa4d.com)