Version: 1.7
语言 : 中文
Importing assets simultaneously
支持的资源类型

资源按需导入

在团结引擎中首次打开项目工程时,需要完整地导入工程文件夹中所有的资源文件。当项目工程较大时,导入耗时很长(可长达数小时甚至十几小时)。 为缩短引擎编辑器开启耗时,提升开发效率,团结引擎新增了资源按需导入模式。开启资源按需导入模式后,打开工程时仅需导入少量必需的资源。其余资源仅在需要被访问时导入。对于多人协作的大型项目,一个开发者通常只需访问工程中的小部分资源,因此可省去导入其它大量资源的时间。实测数据显示,部分项目打开时间可以从2小时以上降至不到4分钟。

资源按需导入的时机有以下两种:

  • 自动触发(默认):引擎需要访问资源时自动触发,对开发者透明,使用安全便捷。

  • 手动触发:开发者可以选择手动触发,避免后续编辑时因资源动态导入影响操作流畅度。

如何启用

按需导入支持以下两种打开方式:

  • 通过命令行参数启用
    打开项目前,在 Tuanjie Hub 中打开 Command line arguments 窗口,添加命令行参数
   -ondemand=normal 
  • 通过配置文件启用
    在项目根目录下创建一个名为 adb2.txt 的文件,内容如下:
   OnDemand=normal

其中,On-Demand 参数的值可设为:

说明
off 关闭 On-Demand Import,使用普通导入模式(效果等同于没有 adb2.txt 文件)
normal 启用 On-Demand Import,并采取较为保守的导入策略,.asset 文件及其依赖会在首次打开工程时导入
aggressive 启用 On-Demand Import,并采取较为激进的导入策略,.asset 文件及其依赖均会按需导入

按需导入通过开启导入进程来完成资源的导入,可以在 adb2.txt 中配置期望的导入进程数量。可配置的字段如下:

说明
desiredworkercount 导入管线最佳并行运行的导入工作进程数量。
standbyworkercount 即使工作进程处于空闲状态,也要保留的最小工作进程数量。如果工作进程数量超过该值,引擎会关闭已空闲一段时间的导入工作进程,以释放系统资源。

desiredworkercount 推荐设置为系统逻辑核心数量的 1/4,standbyworkercount 推荐设置与 desiredworkercount 相同的值。如果 desiredworkercount 设置过高,导入工作进程可能会与其他进程产生竞争。

通过 adb2.txt 的方式,以保守的策略开启按需导入并打开工程,同时设置期望并行运行的工作进程为 4,最小保留的工作进程为 4,可以在 adb2.txt 按照如下方式进行配置:

ondemand=normal
desiredworkercount=4
standbyworkercount=4

导入状态显示

按需导入模式下,Project 窗口中的资源分为两种状态:

  • 已导入状态:根据资源类型显示图标或者缩略图。
  • 未导入状态:根据资源文件后缀显示图标,以模糊效果呈现。例如:

如下图所示(红色框内为未导入状态文件,绿色框内为已导入状态文件):

Fbx 模型文件:

FBX模型文件示例
FBX模型文件示例

Prefab 资源文件:

prefab资源文件示例
prefab资源文件示例

材质文件:

材质文件示例
材质文件示例

资产导入时机

在对资源执行查看、编辑或使用操作前,必须先进行导入。

选中资源

在 Project 窗口中选中资源

在 Project 窗口中选中一个或多个未导入资源时,编辑器会自动触发这些资源的导入。支持所有选中方式:

  • 鼠标单击选中
  • 键盘方向键移动选中
  • Select All 全选

注意: 选中文件夹不会加载文件夹中的资源。

在资源选择窗口中选中资源

在资源选择窗口中点击某个资源时,触发该资源的导入操作。例如在材质的属性面板中,打开 Select Texture 窗口。点击其中未加载的纹理时,会触发该纹理的导入。

资源选择窗口点选触发导入
资源选择窗口点选触发导入

手动触发批量导入

启用按需导入模式后,Project 窗口的工具栏中会出现“资源导入”的按钮,点击后弹出菜单。其中包含两个导入命令和两个设置项。

批量导入菜单
批量导入菜单
  • 点击 Import Unimported Assets From Selected Folders ,从当前选中的文件夹中查找所有未导入资源并执行导入操作。在不同的Project 窗口视图模式下选中的文件夹范围也不同。

  • 点击 Import Unimported Assets From Search Results,将当前搜索结果列表中的所有未导入资源执行导入操作。此操作不会导入搜索结果中的文件夹内资源,仅对搜索结果列表中的资源项生效。

  • 勾选 Import From Subfolders Recursively,递归导入子文件夹中的资源。

  • 勾选 Import From Selected Folders Automatically 后,当文件夹被展开时,自动导入其中的未导入资源。

加载场景(scene)

在 Project Window 单击选中场景资源时,仅导入 SceneAsset 对象。在双击打开一个场景时,才会触发该场景内引用的所有资源的导入。

  • 在Project窗口中,双击打开一个场景
  • 在Play mode中,调用SceneManager.LoadScene()
  • 在Edit mode中,调用EditorSceneManager.OpenScene()

调用 AssetDatabase 相关接口

在脚本中通过 AssetDatabase 相关接口导入或加载资源,或访问资源中的对象时,会先导入该资源(及其引用的资源)。 相关接口有:

注意:

有些查询函数,对于未加载的资源,会返回无效值,比如:

注意: 调用 FindAssets 接口查找资源时,不会导入搜索范围内的未导入资源。

调用 Resources.Load 相关接口

首次调用 Resources.Load 相关接口时,会触发项目中所有 Resources 文件夹下资源的导入。 相关接口包括:

  • Load
  • LoadAll
  • LoadAsync

打包 AssetBundle

在脚本中调用 BuildPipeline.BuildAssetBundles 接口来构建 AssetBundles 时,会先导入待打包的所有资源。

构建工程

通过 Build Settings 界面的 Build 按钮,或通过脚本调用 BuildPipeline.BuildPlayer 接口进行构建工程时,会导入待构建场景引用的所有资源。

支持按需导入的资源类型

normal & aggressive 模式

  • 工程打开时导入的资源:

  • 文件夹

  • 脚本相关资源:
    • cs, asmdef, asmref 后缀的文件
    • dll, winmd, so, jar, java, kt, aar, suprx, prx, rpl, cpp, cc, c, h, jslib, jspre, bc, a, m, mm, swift, xib, bundle, dylib, config 后缀的文件
    • .androidlib, .bundle, .framework, .plugin 后缀的文件夹
  • Shader:
    • cginc, cg, glslinc, hlsl, shader, compute
      注:shader导入时不会编译变体
  • Localization资源:.po

  • 自定义ScriptedImporter资源:
    • 包括引擎内置的 .uss, .uxml
  • 按需导入的资源:
    • Texture
    • Mesh
    • Prefab
    • Material
    • Scene
    • Audio Clip
    • Video Clip
    • Animation Clip
    • Animation Controller
    • Model
    • Font

normal 模式

  • 工程打开时导入的资源:
    • .asset 文件
    • .asset 文件中引用到的资源

aggressive 模式

  • 按需导入的资源:
    • .asset 文件

已知问题

  • 未导入的资源,在 Search 窗口 中查找受限。
  • AssetPostprocessor.OnPostprocessAllAssets() 在OnDemand资源被导入时不会被调用。
Importing assets simultaneously
支持的资源类型