因此Unity缓存一个instance ID对应Object,通过instance ID快速找到Object。instance ID是一种快速获取对象实例的ID,包含着对GUID和Local ID的引用。解析instance ID可以快速返回instance表示的已加载对象,如果为加载目标对象,则可以将文件GUID和Local ID解析为对象源数据,从而允许Unit
——4.InstanceID:该ID是运行时生成的,每个Object的InstanceID唯一,我们可以通过 Object.GetInstanceID 的API来获取。 一个Prefab中的GameObject组件:— !u!1 &5430584720211674993 (1表示Class ID,&后面的是LocalID)Unity通过GUID找到任何一个文件,通过LocalID找到其中的某个子文件。 如果打包的时候不希望引用某个资...
在这个例子中,MonoBehaviourWithId是一个抽象基类,它包含生成唯一ID的逻辑。任何需要生成唯一ID的类都可以继承这个基类,并在Awake方法中自动生成唯一ID。 除了使用Guid类,Unity还提供了其他方法来生成唯一ID,例如使用InstanceID属性,但需要注意的是,InstanceID在对象被销毁并重新创建时可能会重复,因此它并不总是全局唯一...
3、FileID(LocalID) 有一个问题是,如果是一个图集,下面有若干个图片,那么,这个GUID怎么对应一个文件呢?是的,对于一个文件下有多个文件的情况,就需要另外一个ID来表示,这就是LocalID。更习惯用Meta文件中的名字FileID。FileID存储方式有2种: 对于资源文件,非序列化文件,由于一般不会去更改源文件,所以FileID存...
Instance ID被间接映射到这个对象 对象此刻还没有被加载进内存 对象的源数据已经可以被定位到了,随时可以实例化。 底层细节: 当一个对象被加载进来,unity会尝试解析该对象的每一个引用对象的File GUID 和Local ID,得到Instance ID,然后加载进Instance ID所对应的对象。这需要: ...
Instance ID被间接映射到这个对象 对象此刻还没有被加载进内存 对象的源数据已经可以被定位到了,随时可以实例化。 底层细节: 当一个对象被加载进来,unity会尝试解析该对象的每一个引用对象的File GUID 和Local ID,得到Instance ID,然后加载进Instance ID所对应的对象。这需要: ...
另外,如果 GUID+LocalID 无法转换为 InstanceID,则 Object 同样不会被加载。 Object 不被加载,将会导致Editor中引用部分显示Missing,对应的部分可能不显示,如果是纹理,则会显示为洋红色。 3、Obejct 会在下面三种情况下被卸载: ① Scene 被破坏性地改变时,比如非additively调用 SceneManager.LoadScene 时;另外当 ...
Meta文件详解——Unity GUID/LocalID系统 由于meta文件的重要性,这里先说说meta文件的数据结构。meta文件实质上是一个文本文档,只是采用的是一种叫做YAML的格式来写的(见Description of the Format)。unity中的序列化文件都是用这个格式类写的,比如prefab,场景等(后文会继续)。
在Unity打包的时候,Resource文件夹下的文件会生成一个依赖文件,存储文件的一些信息。FileGUID和LocalID来代表文件以及文件位置,然后运行的时候会根据以上两个Id生成唯一的InstanceId。 3 AssetBundle读取 AssetBundle这是最常用的一种方式,目前商业化开发中基本都会使用这种方式来进行资源管理。
先说材质球引用多余贴图的问题,打开材质的mat文件,可以看到,导致一直引用的原因,是mat文件里面本身就是按照shader参数的名称,存储了对应通道的fileId和guid。如下图,虽然Unlit/Texture的shader只用到了_MainTex,但_BumMap、_Speculer和_Matcap里面还是存在着贴图的引用的。