在团结引擎中首次打开项目工程时,需要完整地导入工程文件夹中所有的资源文件。当项目工程较大时,导入耗时很长(可长达数小时甚至十几小时)。 为缩短引擎编辑器开启耗时,提升开发效率,团结引擎新增了资源按需导入模式。开启资源按需导入模式后,打开工程时仅需导入少量必需的资源。其余资源仅在需要被访问时导入。对于多人协作的大型项目,一个开发者通常只需访问工程中的小部分资源,因此可省去导入其它大量资源的时间。实测数据显示,部分项目打开时间可以从2小时以上降至不到4分钟。
资源按需导入的时机有以下两种:
自动触发(默认):引擎需要访问资源时自动触发,对开发者透明,使用安全便捷。
手动触发:开发者可以选择手动触发,避免后续编辑时因资源动态导入影响操作流畅度。
按需导入支持以下两种打开方式:
-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 模型文件:
Prefab 资源文件:
材质文件:
在对资源执行查看、编辑或使用操作前,必须先进行导入。
在 Project 窗口中选中一个或多个未导入资源时,编辑器会自动触发这些资源的导入。支持所有选中方式:
注意: 选中文件夹不会加载文件夹中的资源。
在资源选择窗口中点击某个资源时,触发该资源的导入操作。例如在材质的属性面板中,打开 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 后,当文件夹被展开时,自动导入其中的未导入资源。
在 Project Window 单击选中场景资源时,仅导入 SceneAsset
对象。在双击打开一个场景时,才会触发该场景内引用的所有资源的导入。
在脚本中通过 AssetDatabase
相关接口导入或加载资源,或访问资源中的对象时,会先导入该资源(及其引用的资源)。
相关接口有:
注意:
有些查询函数,对于未加载的资源,会返回无效值,比如:
注意: 调用 FindAssets
接口查找资源时,不会导入搜索范围内的未导入资源。
首次调用 Resources.Load 相关接口时,会触发项目中所有 Resources 文件夹下资源的导入。 相关接口包括:
Load
LoadAll
LoadAsync
在脚本中调用 BuildPipeline.BuildAssetBundles
接口来构建 AssetBundles 时,会先导入待打包的所有资源。
通过 Build Settings 界面的 Build 按钮,或通过脚本调用 BuildPipeline.BuildPlayer
接口进行构建工程时,会导入待构建场景引用的所有资源。
工程打开时导入的资源:
文件夹
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
后缀的文件夹cginc
, cg
, glslinc
, hlsl
, shader
, compute
Localization资源:.po
.uss
, .uxml
等.asset
文件.asset
文件中引用到的资源.asset
文件AssetPostprocessor.OnPostprocessAllAssets()
在OnDemand资源被导入时不会被调用。