文章目录

  • Unity特殊文件夹
  • 预定义的程序集
  • COCOS和Unity资源管理对比
  • Editor 编辑器文件夹
  • StreamingAssets 流资源文件夹
  • Resources 资源文件夹
  • Library 库文件夹
  • 待补充内容



Unity特殊文件夹

Unity 保留了一些项目文件夹名称来指示内容具有特殊用途。其中一些文件夹会影响脚本编译的顺序。这些文件夹名称为:

文件夹

名称

Assets

资产

Editor

编辑器

Editor default resources

编辑器资源

Gizmos

辅助图标

Plugins

插件

Resources

资源

Standard Assets

标准资产

StreamingAssets

流资产

预定义的程序集

Unity 根据脚本文件在项目文件夹结构中的位置,以四个不同的阶段编译脚本。Unity 为每个阶段创建一个单独的 CSharp 项目文件 (.csproj) 和一个预定义的程序集。(如果没有符合编译阶段的脚本,Unity 不会创建相应的项目文件或程序集。)

当脚本引用在不同阶段编译的类(因此位于不同的程序集中)时,编译顺序很重要。基本规则是无法引用在当前阶段之后的阶段编译的任何内容。在当前阶段或早期阶段编译的所有内容则是完全可用的。

编译阶段如下:

阶段

程序集名称

脚本文件

1

Assembly-CSharp-firstpass

Standard Assets、Pro Standard Assets 和 Plugins 的文件夹中的运行时脚本。

2

Assembly-CSharp-Editor-firstpass

Editor 的文件夹(位于名为 Standard Assets、Pro Standard Assets 和 Plugins 的顶级文件夹中的任意位置)中的 Editor 脚本。

3

Assembly-CSharp

不在Editor 的文件夹中的所有其他脚本。

4

Assembly-CSharp-Editor

剩下的所有脚本 (它们位于一个名为“Editor”的文件夹中)。

COCOS和Unity资源管理对比

COCOS Creator的资源管理是比较简单的,主要靠的是mata文件,通过文件中记录的UUID和资源产生对应关系,以实现资源映射。打包时通过判断文件的引用情况最终决定哪些文件会被打进包中(Resources文件夹下的文件无论是否引用都会打包)。这样的方式有一些弊端,比如多人同步提交代码时容易出现meta文件冲突,使用GIT时会比较麻烦,影响效率。

Unity的资源管理有多种方式,

Editor 编辑器文件夹

这个文件夹是专门用来做编辑器级别功能的,比如一些辅助开发的插件,或者地图生成器、角色展示器等,这类功能都是在开发过程中使用的,不需要打包到游戏中。

Editor文件夹可以有多个,可以直接放在Assets文件夹下,也可以放在某个功能子文件夹下,官方说法是可在 Assets 文件夹中的任何位置添加多个 Editor 文件夹。应将 Editor 脚本放在 Editor 文件夹内或其中的子文件夹内。

使用 Editor 脚本中的 EditorGUIUtility.Load 函数可从 Editor 文件夹中的 Resources 文件夹加载资源。这些资源只能通过 Editor 脚本加载,并会从构建中剥离。

注意:如果脚本位于 Editor 文件夹中,Unity 不允许将派生自 MonoBehaviour 的组件分配给游戏对象。

StreamingAssets 流资源文件夹

只读,也是资源文件夹,但是其中的文件不压缩也不加密,需要使用Application.steamingAssetsPath访问该路径,通常存放二进制文件、配置文件或文件型数据库。

Resources 资源文件夹

只读,其中的文件打包时会压缩加密,使用Resources.Load方法动态加载,一般放一些动态加载的模型资源Prefab、Object之类的,跟cocos的Resources是一样的。
这个文件夹好不好?好!但是该不该随便用呢?答案是不应该。
1:它使内存管理变得困难;
2:不恰当的使用Resource文件夹,会增加程序启动时间和打包时间;
3:降低了工程中的内容转换到特定平台的能力,使内容更新困难;
4:随着Resources文件夹数量的增加,对这些文件夹中的Assets的管理变得非常困难;
5:资源系统降低了项目向特定平台提供自定义内容的能力,并消除了增量内容升级的可能性;
6:unity为了兼容所有平台,Resources文件下的资源使用的统一打包,这就会对资源的优化有一定的限制,比如说把图片放在Resource文件夹下,unity不会对这些图片做压缩,这无异是增加了包体大小。

Library 库文件夹

Unity把Asset下支持的资源导入成自身识别的格式,以及编译代码成为DLL文件都放在Library文件夹中。Unity编辑器自动生成Library文件夹并不会 自动删除 不需要的资源文件,当删除文件夹Assets的图片、音频资源的时候,并不会自动删除,而是保留,这就是为什么这个Library文件夹会越来越大的原因。

待补充内容

TODO
Unity编译的顺序是什么?哪些东西会被打包?
Unity资源的生命周期
Editor文件夹具体怎么玩?
AssetBundles都做了什么?
Resources目录跟AssetBundles的关系
什么是AssetDatabase?有什么好处?怎么用?
补充其他特殊文件夹的讲解
吃透官方文档中“脚本-Unity架构”整个章节
什么是程序集?程序集干嘛用的?官方文档中程序集章节提到的Pro Standard Assets是什么意思?
程序集如何自定义?通用的自定义程序集是什么样的?
Unity和cocos的文件管理区别。