20250523-关于Unity中的GUID简介(未完待续)
20250523-关于Unity中的GUID简介(未完待续)
在学习开发的过程中因为好奇,在文件资源管理器中打开Sprite源文件目录,发现Unity中的Sprite是一张张.PNG格式的图片,但是每张图片文件都有一个同名的.meta文件,本文就来简单探索一下.meta文件及GUID。
打开其中的一个.meta文件显示如下:
一、.Meta文件
1.是什么
.meta 文件的作用简单来说是建立 Unity 与资源之间的“桥梁”,是用于辅助管理Unity资源文件的文件。 在游戏中引用一个游戏资源,Unity 并不是直接按照文件的路径或者名称,而是使用一个独一无二的 GUID 来指向工程里该资源文件。
2.作用
1)是用于辅助管理 Unity 资源文件的文件, Unity 根据 meta 里记录的 GUID 来区分项目中的不同资源;
2).meta 还记录了一些对应资源的非常重要的信息,比如:各个资源 Inspector 的信息等。
3.内容
meta 文件一般包含了以下内容:
GUID:上面我们说 Unity 会分配一个唯一 ID ,就是存放在这里
MonoImporter:根据不同的文件类型,它的数据是不同的 ImprotSetting 数据,比如 Mode Improter ,Audio Improter 等等,对照 Inspector 面板就可以看懂每行数据
二、GUID是什么
GUID 存储在 Unity 工程为每一个资源和文件生成的 meta 文件里。
除了 GUID , meta 文件还存储了有关资源导入的信息。例如,贴图资源在导入时可以当作标准贴图、法线贴图、GUI 贴图、 cookie 或者光线贴图。这些导入设置都会被存储在 meta 文件里。
GUID 优点
移动、重命名或者修改资源的内容,这个资源仍然可以通过 GUID 来被引用(只要 GUID 不变,资源就能够被引用。)
GUID 缺点
必须明确的意识到 Meta 文件是被关联到特定的资源上的,如果删除了一个 meta 文件, Unity 会认为原始的资源文件已经被删除,然后为这个“ 新的 ” 资源文件生成一个新的 GUID 。这就是游戏场景中的资源引用中断的最常见原因。
三、导入资源
当把新的资源导入 Unity 时,Unity 会自动做下面这件事:
1. 分配唯一 ID
2. 创建 .meta 文件
3. 处理资源
1. 分配唯一 ID :
Unity 会维护一个自己资源列表,在将资源导入 Unity 的时候, Unity会先检测这个资源列表,然后为导入的资源分配一个唯一的 ID ,在Unity 中会使用此 ID 来引用资源。
2. 创建 .meta 文件
Unity 在 4.2 版本后加入了 .meta 文件,如果在 4.2 以后的版本中看不到.meta 文件可以进行以下设置 :
Edit->Project Settings->Editor / VersionControl 选项中设置 Visible meta Files 选项
经过上述行为后,打开工程目录( 在 Project 面板中,右键选择 Show in Explorer 选项 ), 就可以看到以 .meta 后缀的文件。可以看到 Unity 为 Assets 文件中的每个文件和文件夹都创建了 .meta 文件。
3. 处理资源
Unity 会将你导入到工程中的数据进行一次转换,转换为 Unity 在编辑器运行时能识别的数据,这些数据会被存放在工程的 Library 文件中。Library 文件内的内容是由 Unity 自动生成的,所以我们不用去进行对 Library 文件的修改。在对 Unity 工程进行版本控制时,也不需要将 Library 文件加入其中。
四、GUID生成器插件的使用
-
下载插件
项目网址:https://gitcode.com/gh_mirrors/un/unity-guid-regenerator -
阅读插件使用说明
-
导入插件(其实就是一个C#脚本文件)
-
按照使用说明,为资源文件重新分配GUID
查看修改前GUID:
修改操作:右键选择需要修改的资源文件,单击如下菜单
查看修改后GUID:
修改成功!
五、个人总结
- 所谓GUID其实就是一串具有特定含义的字符串,在资源导入时由Unity自动分配给资源文件,用于资源定位和引用的唯一的身份码。GUID信息丢失会导致找不到资源的问题。
- GUID与资源文件路径相关联,在文件资源管理器中移动资源文件位置,则.meta文件一定要跟着资源文件,否则自动生成新的.meta文件中的GUID会改变。(尽量在Unity编辑器的Project窗口进行文件的移动,不直接在文件资源管理器中移动,这样可以降低问题概率)
- 在开发过程中要注意预防.meta文件丢失和.meta文件重复的问题,不轻易修改资源位置,更不要修改.meta文件。
- 提交SVN时要把资源文件及对应的.meta文件一起提交。
- 注意避免在非Unity环境下(比如Windows资源管理器)将资源及其.meta文件复制多份导致GUID重复的问题。正常来说副本的.meta文件的GUID要重新分配并与原版的GUID不一样,才不会产生GUID冲突。
六、参考资料
- https://blog.csdn.net/liweizhao/article/details/142071853
此文就介绍得很细致,举的例子很生动。 - https://www.cnblogs.com/zhaoqingqing/p/5823927.html
此文从资源(Assets)和对象(UnityEngine.Objects)关系的角度介绍了GUID以及本地ID的内涵和作用 - https://blog.csdn.net/gitblog_00722/article/details/144799735
本文介绍了一种GUID的生成器插件
感谢您的阅读,希望本文对您有所帮助~