At startup, the Instance ID cache is initialized with data for all Objects immediately required by the project (i.e., referenced in built Scenes), as well as all Objects contained in the Resources folder. Additional entries are added to the cache when new assets are imported at runtime or when Objects are loaded from AssetBundles. ( Note: An example of an Asset created at runtime would be a Texture2D Object created in script, like so: var myTexture = new Texture2D(1024, 768); )
File GUID(资源UID)
编辑器层面,存在 .meta 文件里,唯一标识磁盘上的一个资源文件,打包后不直接使用Local ID
一个资源文件内部,每个 Object 的编号
比如一个 FBX 里有 Mesh、Material、动画,各有自己的 Local IDInstance ID(实例ID)
运行时层面,Unity 内存中每个 Object 的唯一标识,本质是一个整数,运行时动态分配
是 File GUID + Local ID 的运行时映射
1 | 磁盘: File GUID + Local ID → 唯一定位一个资源 |
- Instance ID Cache 的作用
1 | 启动时预填充: |
当你持有一个对象引用,Unity 内部就是拿着 Instance ID 去缓存里查:
- 查到且有内存地址 → 直接返回
- 查到但没加载 → 触发加载
- 查不到 → null(Missing)
总结:Instance ID Cache 是运行时的”对象注册表”,把内存中每个 Object 的整数 ID 映射到它的资源来源(GUID+LocalID)和内存位置。
资源 UID(File GUID)是编辑器/磁盘层面的概念,Instance ID 是运行时层面的概念,两者通过这个缓存关联起来。