尽管同时用GUID和Local ID的方法是鲁棒的,但是GUID的比较和查找是比较慢的。unity内部并不直接对GUID进行比较,而是把GUID和local ID合并成一个叫做“Instance ID”的整型(从名字大概可以看出它是实例化的对象的ID),用一个叫做PersistentManager的缓存存放这个数据。这里是简单的线性数组存放. 这个缓存定义了一个映射关...
GUID:存在于unity中资源对应的.meta文件中,通过GUID就可以找到工程中的文件;表示这个文件,用来记录资源之间的关系。 Local ID(file ID):资源内部的ID,用来记录资源之间的具体引用。 Instance ID:资源的快捷访问ID,unity查找资源的时候会根据guid和local id与instance id的映射关系,直接使用instance id去查找,可以减少...
当该 Object 被加时,如果它引用了其他资源,Unity将尝试将每个引用的 GUID+LocalID 转换为 InstanceID,之后(实际上这些也都是自动处理): ① 如果InstanceID对应的 Object 存在于内存,就直接返回; ② 如果不存在,但是 InstanceID 缓存中存在有效的 GUID+LocalID,则 Object 自动被加载; ③ 如果不存在,且对应的 GU...
定义在它同目录下,同名的非meta文件的唯一ID:GUID。而对于unity的序列化文件来说,引用的对象用的就是这个GUID。所以一旦meta中的GUID变更了,就要注意,它很可能引起一场引用丢失的灾难 存储资源文件的ImportSetting数据。在上文中资源文件是有ImportSetting数据的,这个数据正数存储在meta文件中。ImportSetting中专门有存...
于是Unity又弄了一套缓存(还记得前面那套缓存嘛?是用来记录GUID和文件的路径关系的)。PersistentManager用来把File GUIDs和Local IDs转化为一个简单的、Session唯一的整数,这些整数就是Instance ID。Instance ID很简单,就是一个递增的整数,每当有新对象需要在缓存里注册的时候,简单的递增就行。
二、Meta文件详解——Unity GUID/LocalID系统 由于Meta文件的重要性,这里先说说Meta文件的数据结构。Meta文件实质上是一个文本文档,只是采用的是一种叫做YAML的格式来写的(见Description of the Format)。Unity中的序列化文件都是用这个格式类写的,比如Prefab、场景等(后文会继续)。
Instance ID被间接映射到这个对象 对象此刻还没有被加载进内存 对象的源数据已经可以被定位到了,随时可以实例化。 底层细节: 当一个对象被加载进来,unity会尝试解析该对象的每一个引用对象的File GUID 和Local ID,得到Instance ID,然后加载进Instance ID所对应的对象。这需要: ...
GUID:Unity会为每个导入到Assets目录中的资源创建一个meta文件,文件中记录了GUID,GUID用来记录资源之间的引用关系。 fileID:用于标识资源内部的资源。 资源间的依赖关系通过GUID来确定;资源内部的依赖关系使用fileID来确定。 InstanceID(实例ID) Unity为了在运行时,提升资源管理的效率,会在内部维护一个缓存表,负责将文...
3、我们可以发现手中没有龙珠,是因为我们手中的黑色小本本,并没有记录龙珠装在书包的那个位置里;同样,Unity通过Instance ID,来获取或判断一个对象是否已经被加载完毕。Instance ID由File GUID和Local ID转换而成,可以简单理解成是记录了资源所在内存地址的写着数字的钥匙牌。
activeInstanceID返回实际对象选择的 instanceID。包括预制件、不可修改的对象。 activeObject返回实际对象选择。包括预制件、不可修改的对象。 activeTransform返回处于活动状态的变换。(显示在检视面板中的变换)。 assetGUIDs返回所选资源的 GUID。 gameObjects返回实际游戏对象选择。包括预制件、不可修改的对象。