Assets下所有文件、文件夹都有一个meta文件,里面有一个guid,然后是xxxImporter,具体类型包括DefaultImporter、MonoImporter(脚本)、PrefabImporter等。
这个guid可以记录资源之间的引用和依赖。加载一个预制体,unity能连带着把它的fbx加载,因为prefab文件里记录了这个fbx的guid(预制体这里是prefab文件本身记录,不是meta文件记录),fbx的meta里记录材质的guid,所以能连带加载材质。(这里prefab里没有直接出现材质的guid)
预制体引用fbx是在YAML,fbx引用材质是在meta,材质引用贴图是在YAML。可以总结出规律就是如果一个资源引用出现的检查器头上有xx Import Settings,那么它的guid会出现在meta里。而选中预制体、材质,出现的检查器就是它们本身。
不难想象,Unity在内存里维护了一个guid-资源对象表,解读YAML和meta时遇到一个guid就去这个表里查。而AB包加载的情景,我们加载了一个AB包,它包含的资源及其guid也加入了这个表,如果没有加载依赖的AB包,依赖就丢失。Resources加载不会出现依赖丢失,因为它不允许资源和依赖分在不同文件。
然后我们注意到png、fbx等文件的importer部分特别长。这部分是选中这些文件时检查器显示的选项。