Unityプロジェクトのファイルを覗いてみると、次のようなmetaファイルが作られるみたいなの…
これはUnityのアセットを管理するのに必須のファイルだわ。
消さないように気を付けてね。
metaファイルは、Unityアセットのインポート情報が格納されたファイルです。
Unityプロジェクトにおいて必要なファイルであり、削除したり編集したりすると様々な弊害が発生します。
本記事では、metaファイルの仕組みと、取扱いにおける注意点をまとめました。
目次 非表示
metaファイルとは
Unityプロジェクト内のアセットファイルのインポート情報が格納されたファイルで、必ずアセットファイルと1対1で存在する必要があります。
metaファイルのパスは、アセットファイルパス.metaとなります。
例えば、Assets/Sprites/Player.pngというアセットファイルに対するmetaファイルパスは、Assets/Sprites/Player.png.metaとなります。
metaファイルの構造
metaファイルは、主に次の情報で構成されます。
- アセットファイルのGUID(グローバルユニークID)
- アセットファイルのインポート情報
例えば、スプライトとして管理する画像ファイルは次のような構成になっています。
このように、アセットファイルに対応したmetaファイル設けることで、元のアセットファイルを一切変更せずにインポート設定を保持することが可能です。
アセットファイルのGUID
metaファイルには、アセットファイルのGUID(グローバルユニークID) が必ず保存されています。GUIDは、Unityプロジェクトにおいて他者と絶対に重複しない識別子です。
もし重複したGUIDが存在する場合、Unity側でGUIDの再生成が行われます。
アセット間の依存関係の表現
先に述べたアセットファイルのGUIDは、アセット同士の依存関係を表現するために使われます。
例えば、次のようなスプライト(アセットファイル)をSpriteRendererにアタッチするとしましょう。
このとき、SpriteRendererのSpriteには、アセットファイルのGUIDが指定されます。
スプライトアセットのパスが変わってもGUIDが変わらなければ、参照構造が壊れることはありません。
metaファイルを扱うときの注意点
先述の通り、metaファイルにはGUIDやインポート情報など重要な情報が格納されています。
そのため、意図せずにmetaファイルが消えてしまったり書き換えられたりすると、アセットファイルの情報が壊れてしまう場合があります。
このような問題が起こり得るケースは次の通りです。
アセットファイルの移動や名前変更
アセットファイルの移動や名前変更は、Unityエディタ上で行えば問題ありません。
しかし、WindowsのエクスプローラーやMacのFinder等からアセットファイルを移動または名前変更するときは、対応するmetaファイルに対しても同様の操作をしなければいけません。
対応するmetaファイルのパス変更をしないままUnityエディタに戻ってしまった場合、metaファイルの再生成が行われます。
このような状況になると、アセットファイルのGUIDが変わるため、今までの参照が無効になってしまいます。
無効なGUIDの参照が指定された部分には、インスペクター上でMisssingと表示されます。
なお、参照が無効になった状態でmetaファイルのGUIDを以前の値に書き戻すと、参照関係が復活します。
複数人でUnityプロジェクトを共有する場合
複数人でUnityプロジェクトを共有する場合、アセットファイルのほかmetaファイルを共有する必要があります。metaファイルが存在しないと、metaファイルの再生成が行われてしまうためです。
その際、共有するメンバー間でUnityエディタのバージョンを合わせておく必要があります。
Git等でUnityプロジェクトをバージョン管理するとき、Unityエディタのバージョンが異なると、metaファイルをはじめ、あらゆるアセットファイルで予期せぬ変更差分が出てしまうことになります。
Git管理するときは、metaファイルの共有とUnityエディタのバージョンを合わせることを忘れずにね!
さいごに
今回はmetaファイルについて解説しました。
metaファイルに関するおさらいです。
- 必要不可欠なファイル
- GUIDとインポート情報が保存される
- metaファイルの移動・名前変更を外から行う場合は要注意
- 複数人開発ではmetaファイルの共有とUnityエディタのバージョンを合わせる
ざっくりと必要なファイルであると覚えるだけでも、開発上は十分かもしれません。
本記事により、metaファイルの謎が解ければ幸いです。