主要提供一个内存对象和本地文件的管理。并且提供资源连接的能力。
有三个边界:
- 硬盘上的原始文件 png obj 等等
- 内部资源文件 node image texture shader 等等
- 内存对象 node image 等等
第一种类型的数据完全依靠本地文件系统来管理,通过vfs来读写文件。
第二种是资源的静态组织形式,可以叫做asset对象。asset是对资源的描述,也就是给文件增加更多的属性。比如缩略图,内部对象的列表。不同资源文件里的引用路径就是通过asset的路径实现的,通过#name的方式访问内对象。
第三种是任何可以从Object继承的对象。他们被asset包含。asset更像是一个容器,Object是里面的元素。这种设计可以让asset和文件一一对应。来解决多对象的文件问题。比如一个fbx是n个资源的集合体,对应一个asset可以轻松的管理。对于简单的类型比如png文件也是可以理解为image和texture两个对象。asset本身的类型可以由第一个对象来决定。所以我们可以动态的修改他。每个asset都由一个文件路径,这个路径跟他对应的文件是一对一的。
文件处理的流程:
vfs搜索全部目录,遇到注册过的后缀就生成对应的内文件。比如遇到png就给生成对应的asset对象。生成缩略图。生成对应的信息描述。生成asset的内部对象表。
内部对象是一个容器关系,列表中第一个对象就是asset的主对象。一个asset可以包含多个对象。
asset生成完毕回产生一个树状结构。root根节点,下面包含asset节点。
提供每个asset的导入导出和更新方式。实际上asset更像是一个针对文件后缀的导入导出插件。只不过是动态的,而不是一般软件里静态的工具。asset提供文件到内置类型的转换机制。比如FBX的导入导出。所以asset要求用户设定不同的选项。比如完全导入内置对象,解析外部文件,外部连接。状态之间是可以切换的,但是不一定可以随意提升下降。
修改asset中的资源由asset决定如何处理。是保存在内资源里还是写入回外资源。
内置类型:
就是第三种继承自Object的类型。
解析外部文件:
就是数据存放与外部文件,asset仅仅是生成了其他信息。
外部类型:
对于无法导入的数据我们提供一个独立的asset类型,只是关联对应的文件,提供缩略图。并不需要提供内置对象的分析和解析功能。在导入asset的时候就可以设置类型。或者中途可以切换。
内存管理:
asset并不管理资源的内存对象。这些都是resource的范畴。
-
AssetManager
-
Asset