# uuid与依赖关系

当工具导入资源的过程中,也会给资源加一些额外的信息,放到 meta 文件里面。

  • 给一个文件赋予一个唯一的id:uuid。
  • 并且创建一个 .meta 文件,放在对应的文件旁边。
  • 并且将 uuid 以及 importSetting 都放在这个 meta 文件里面。
  • 然后再根据 meta 里面的信息和资源文件本身去进行编译。

# uuid与依赖关系

uuid是表示一个文件的唯一id。工具会持续的监听文件是否被添加到 assets 目录。一个新的资源被放置到工具的 assets 目录下面的时候,会分配一个随机值作为它的uuid,并且把内容保存在 meta 文件里面,每次分配都是重新生成的。

# 资源间依赖关系

uuid也被用来表达资源间依赖关系。资源内记录着其他资源的uuid,这种我们叫做资源间静态依赖。工具可以分析出资源与资源的关系,去实现自动分包等能力。因为编译流程可能会将一个资源生成多个文件,那么也会根据原始的uuid,加上固定的随机数种子,去生成确定的新uuid。比如 png 如果作为一个 texture 导入,那么编译后在 temp 目录下面会同时存在 png 和texture两个文件,texture的 uuid 是根据 png 在assets目录的 uuid 混了一个固定变量去生成的,这样能保证不同的电脑能始终生成一样的 uuid 给texture,从而保持正确的依赖。一个 material 资源如果想要使用一个 texture 资源,那么在 material 里面记录着的其实是 texture 的uuid,而不是 png 的uuid,在 Assets 目录下其实找不到这个 texture 的uuid。

# meta文件

工具会针对所有的资源文件,包括文件夹都生成一个对应的 meta 文件。里面记录者 uuid 以及对应的import setting。importSetting可以在 Project 窗口选中后,在 inspector 窗口看到,并且可以修改。

重要:Project窗口里面是将 meta 文件隐藏的,在 Project 窗口里面移动资源,工具会默认把 meta 一起移动。在操作系统的文件管理器里面移动文件的时候,一定要记得将 meta 跟随一起移动,否则工具会重新对文件分配新的uuid,导致依赖丢失。如果主动把 meta 删掉,那么也会重新分配一个新的uuid。当依赖丢失的时候就必须手动重新在工具内建立指向关系。

当多人开发的时候,可能不同的人在不同的电脑各自都会放同一个 png 文件到同一个位置,但是他们的 meta 文件中的 uuid 是不一样的。那么在提交到版本管理工具的时候,比如svn,git,就会产生冲突,这里要开发者需要选择其中一个 uuid 作为这个文件真正uuid,同时修正所有引用这个 png 的资源。这里建议尽量不要不同的人上传同一个文件。