GUID:存在于unity中资源对应的.meta文件中,通过GUID就可以找到工程中的文件;表示这个文件,用来记录资源之间的关系。 Local ID(file ID):资源内部的ID,用来记录资源之间的具体引用。 Instance ID:资源的快捷访问ID,unity查找资源的时候会根据guid和local id与instance id的映射关系,直接使用instance id去查找,可以减少...
可以看到多了一个MonoBehaviour,并且这个里面有一个M_Script数据,指向对应的GUID及其FileID。上文我们已经说了,任何一个文件都可以通过GUID找到,然后通过FileID找到它内部的子文件。所以这样就能识别出这个具体是什么类了。 我们往Test中写2个字段 Public int A; Public Test RefTest; 在Main Camera中,设置Test脚本...
尽管同时用GUID和Local ID的方法是鲁棒的,但是GUID的比较和查找是比较慢的。unity内部并不直接对GUID进行比较,而是把GUID和local ID合并成一个叫做“Instance ID”的整型(从名字大概可以看出它是实例化的对象的ID),用一个叫做PersistentManager的缓存存放这个数据。这里是简单的线性数组存放. 这个缓存定义了一个映射关...
先说材质球引用多余贴图的问题,打开材质的mat文件,可以看到,导致一直引用的原因,是mat文件里面本身就是按照shader参数的名称,存储了对应通道的fileId和guid。如下图,虽然Unlit/Texture的shader只用到了_MainTex,但_BumMap、_Speculer和_Matcap里面还是存在着贴图的引用的。 知道了之后,接下来就比较简单了,做一个工具,...
当然,Unity内部还维护了一种Instance ID的映射缓存,是通过guid和Local ID合并计算出来的唯一值,它的作用就是让Unity更快地找到对应的Object。游戏启动时,Unity会根据场景中被引用的Object,初始化Instance ID Cache,额外的Instance ID Cache只会在运行时、动态加载时才会被添加。Instance ID只有在Instance ID标识的Object...
Meta文件详解——Unity GUID/LocalID系统 由于meta文件的重要性,这里先说说meta文件的数据结构。meta文件实质上是一个文本文档,只是采用的是一种叫做YAML的格式来写的(见Description of the Format)。unity中的序列化文件都是用这个格式类写的,比如prefab,场景等(后文会继续)。
GUID与fileID(本地ID) Unity会为每个导入到Assets目录中的资源创建一个meta文件,文件中记录了GUID,GUID用来记录资源之间的引用关系。还有fileID(本地ID),用于标识资源内部的资源。资源间的依赖关系通过GUID来确定;资源内部的依赖关系使用fileID来确定。 InstanceID(实例ID) ...
GUID:Unity会为每个导入到Assets目录中的资源创建一个meta文件,文件中记录了GUID,GUID用来记录资源之间的引用关系。 fileID:用于标识资源内部的资源。 资源间的依赖关系通过GUID来确定;资源内部的依赖关系使用fileID来确定。 InstanceID(实例ID) Unity为了在运行时,提升资源管理的效率,会在内部维护一个缓存表,负责将文...
二、Meta文件详解——Unity GUID/LocalID系统 由于Meta文件的重要性,这里先说说Meta文件的数据结构。Meta文件实质上是一个文本文档,只是采用的是一种叫做YAML的格式来写的(见Description of the Format)。Unity中的序列化文件都是用这个格式类写的,比如Prefab、场景等(后文会继续)。
于是Unity又弄了一套缓存(还记得前面那套缓存嘛?是用来记录GUID和文件的路径关系的)。PersistentManager用来把File GUIDs和Local IDs转化为一个简单的、Session唯一的整数,这些整数就是Instance ID。Instance ID很简单,就是一个递增的整数,每当有新对象需要在缓存里注册的时候,简单的递增就行。