Unity GUID


前言

最近在工作中遇到了项目中分批次打的AB包做热更新时出现丢图的问题,后来逐步定位到图集的guid发生变化了。在此正好总结一下Unity的guid相关的内容。

概念

guid是资源的唯一标识符,Unity用它来记录资源之间的引用关系。

local id/file id是资源内部的id,Unity用它来记录资源内部的具体引用/层级关系。

一般来说,guid和local id是成对使用的,Unity需要同时使用这两种id去查找一个资源。但由于每次需要以全部资源为检索源,数量非常多,查找开销也会大。于是为了加快查找,Unity给已加载的资源生成了一个instance id。

instance id是资源的快捷访问id(一种自增的id),Unity查找资源的时候会根据guid和local id与instance id的映射关系,直接使用instance id去查找,减少查找开销。与guid相比,instance id只由数字组成;与local id相比,instance id位数更短。

通俗来说,guid就好比类名,只能存在一个类;local id就好比实例名,可以存在多个实例;instance id就好比快捷方式,不用查找,点一下就出来了。

资源文件本体没有记录该资源的guid,而是记录的local id。该资源的guid是由其对应的meta文件记录的。除此之外,资源的meta文件还记录了该资源的AB包名和导入设置等数据。

虽说资源文件不记自己的guid,但它记其他资源的guid。所谓其他资源,实际上就是它引用到的资源文件。

生成

Library目录下的metadata文件夹中存储着资源文件元数据(即.info文件,二进制文件)。

当Unity自动构建Library目录的时候,会根据项目中资源的guid来生成元数据。

当Unity创建/导入新资源时,会查找metadata文件夹中是否存在该资源的元数据。如果有就用存在元数据中的guid;如果没有就给该资源生成新的guid,并生成新的元数据。

在开发过程中,如果出现不同批次打的AB包不能找到引用资源的问题,大概率就是guid在不同批次生成的AB包中不同,从而无法根据guid找到引用资源。

引用

上面提到了资源之间的引用关系是由guid记录的。因此,可以通过guid在开发过程中检索所有资源的引用关系,以便对资源进行整理。并且如果出现引用对象加载失败的情况,并且没有发现什么大的问题,可以试着从guid的角度下手。

应用

1、批量资源替换工具。

2、资源引用检索工具。

3、…

后记

这一部分确实绕得头晕,在此记录一下,之后还要再回到这里补充点东西,复习一下。


补充

file id不完全等于local id,Unity有关id的命名一直都比较混乱,file id 又叫做 file guid,而 path id 又叫做 local id 或 local file identifier。file id在工程中用于关联到另一个资源文件,而在AssetBundle中用于关联另一个AssetBundle,而local id 或 path id 则对应到资源文件或AssetBundle中的某个具体的Object。

Unity GUID相关推荐

  1. Unity文件、文件引用、Meta详解

    原文链接:https://blog.uwa4d.com/archives/USparkle_inf_UnityEngine.html 这是侑虎科技第381篇原创文章,感谢作者陈广忠供稿.欢迎转发分享, ...

  2. GUID [xxx] for asset ‘Packages/com.unity.plasticscm-cn/Editor/xxx/xxx‘ conflicts with: ‘Packages/com

    Unity:使用PlasticSCM出现如下报错,且每隔一定时间会再次报此错误: GUID [xxx] for asset 'Packages/com.unity.plasticscm-cn/Edit ...

  3. Unity 关于GUID的一些实用例子

    关于GUID的具体理解可以参考这篇文章: https://www.cnblogs.com/zhaoqingqing/p/5823927.html 这里我们就简单理解为表示Unity文件的一个唯一标识符 ...

  4. unity重新生成guid的插件免费

    https://github.com/jeffjadulco/unity-guid-regenerator/blob/master/README.md

  5. Unity应用架构设计(9)——构建统一的 Repository

    谈到 『Repository』 仓储模式,第一映像就是封装了对数据的访问和持久化.Repository 模式的理念核心是定义了一个规范,即接口『Interface』,在这个规范里面定义了访问以及持久化 ...

  6. unity 编辑器存档_Unity教程 | 自制简易的游戏存档系统

    原标题:Unity教程 | 自制简易的游戏存档系统 本文将为大家分享如何在Unity中实现简单的游戏存档系统,其中不会包含太多实际的代码,仅介绍在制作过程中需要考虑与解决的问题.该系统由一个学生团队为 ...

  7. Unity学习笔记 - Assets, Objects and Serialization

    Assets和Objects Asset是存储在硬盘上的文件,保存在Unity项目的Assets文件夹内.比如:纹理贴图.材质和FBX都是Assets.一些Assets以Unity原生格式保存数据,例 ...

  8. 你知道Unity IoC Container是如何创建对象的吗?

    Unity是微软P&P推出的一个开源的IoC框架,最新的官方版本是2.0.Unity之前的版本建立在一个称为ObjectBuild的组件上,熟悉EnterLib的读者,相信对ObjectBui ...

  9. unity 开发总结

    1.慎用线程,unity对线程的支持不是特别完善. 在一些网络通信,资源下载,解压文件,不得已要开线程操作的地方,需要进行线程回收. 2.不压缩的ab,比经过压缩的ab大了将近4倍. 在打包ngui的 ...

最新文章

  1. 刚刚,三名中国航天员奔赴太空!其中一位刚参加完博士毕业典礼!
  2. 机器学习笔记六:K-Means聚类,层次聚类,谱聚类
  3. 关于React面试题汇总
  4. Git for Windows 2.13.1(2) 发布,分布式版本控制系统
  5. linux kernel中的module_init/initcall代码导读
  6. Struts2输入校验
  7. 软件工程--第三章--需求分析
  8. 【已解决】打开项目Android studio 报gradle sync failed:connect time out.
  9. linux使用ftp命令_如何使用Linux FTP命令
  10. nsis出错_安装程序出现NSIS ERROR错误解决思路
  11. centos7阿里yum源报问题
  12. 计算机专业要学数值分析吗,数值计算方法 数值分析这两门课有什么区别?
  13. 连点器安卓手机版_【百度识图器安卓下载】百度识图器官方app下载 v3.6.0 手机版...
  14. 2021上半年教资综合素质——主观题
  15. 新东方---博客分类目录
  16. 计算机听课与评课活动记录表,听课评课记录表.doc
  17. nginx服务器access_log日志详解
  18. 【网络工程师】<软考中级>网络互联与互联网
  19. 疯子的匣子_人工智能扮演``疯子''来像孩子一样学习语法
  20. 有什么好用的苹果群控软件?

热门文章

  1. linux中zip加密压缩
  2. 关于Altium Designer10(AD10)原理图中文乱码变问号?的问题
  3. musicbox使用方法_使用Pi MusicBox收听流音乐
  4. 三星j7出现android,【三星GALAXYJ7评测】Android 5.1+TouchWiz 2015_三星 GALAXY J7_手机评测-中关村在线...
  5. NNI GridSearch示例
  6. 大数据开启“互联网+统计”新模式
  7. js 鼠标按下并移动事件
  8. 数据库如何理解GROUP BY子句作用
  9. 月薪3000,交满15年社保,能拿到多少养老金?今天统一回复
  10. 音频css转换代码,html5+css3酷炫音频播放器代码