読者です 読者をやめる 読者になる 読者になる

脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Unityのmetaファイルが持つguidを変更する

前提

  • Unityでは各ファイルに対してメタファイルが自動で生成される
  • このmetaファイルの中でguidというパラメータが設定されている
  • 他のオブジェクトとの相関性などは、ファイル名ではなくこのguidをもとにして行われている
fileFormatVersion: 2
guid: 14f9hogehogehogehogefugaugasdfd7fc21a  //<== これ
timeCreated: 1467869181
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData: 
  assetBundleName: 
  assetBundleVariant: 

問題

  • スクリプトリファクタリングをするときなど、適当な名前のファイルとしてコピーし、後で同名ファイルを削除して置き換えるというようなことをした場合、ファイル名は同じだが生成されたmetaファイルのguidが異なるので、他のオブジェクトとの関連性がリセットされてしまっている。
  • もう一つ問題として、パッケージをexportして別プロジェクトへimportする場合があるが、このとき同じguidが使われていると全く別のファイルにも関わらず同じguidのオブジェクトが上書きされてしまう

解決方法

  • 上の方の問題に関してはそもそも該当のファイルを直接編集すればいいが、下のimport問題が少しやっかいで、この場合ファイルのguidを変えてやる必要がある
guidの変更
  • 試しにmetaファイルを削除してUnityを起動してみたところ、新しく新規にmetaファイルが作成されたのでいけるかと思ったが、まさかの消したはずのguidと同じguidが再度生成されていた。
  • なので現在は少し強引ではあるが、Duplicateで同じファイルを作成し(この時点で違うguidをもつmetaファイルが生成される)、これをもとにパッケージをexportすることにしている。
  • もちろんmetaファイルを直接編集してもいいのだが、低い確率で他のファイルが既に利用しているguidにしてしまった場合、問題の発見が困難になってしまう
    • DuplicateだとUnityの機能で行うので、Unityが重複のないguidをアサインしてくれる

他にいい方法があるような気がしないでもない・・・