【Unity】metaファイルって何?
「〇〇.meta」
Git使用時に突如として現れる謎のファイル。
コミットしなかったら、エンジニアの人に怒られるファイル。
一体何者なんだ…。
本記事ではそんな謎多きmetaファイルの正体に迫る…
metaファイルとは
一言でこうだというのが思いつかなかったので、metaファイルの主な特性を箇条書きにしました。
①metaファイルはAssetファイルがインポートされると同時に作成される。
②metaファイルには対応AssetファイルのUnityプロジェクトにおける設定、参照関係が記述、保管される。
③metaファイルにはAssetファイルを識別するためのGUIDが記述されている。
大体こんなもんです。
metaファイルの作成
UnityではAssetファイルがインポートされると同時にそれに対応するmetaファイルが作成されます。「いつの間に!?知らないよ、そんなやつ。」と思うかも知れません。それもそうです。だって、デフォルトではmetaファイルは隠しファイルとなっているので、表示されないんですもん。Gitを使うようになって初めて存在知った!って人が多いのもこのあたりが原因なんでしょう。
ちなみに、メニューバー>ProjectSettings>EditorのVersionControlのModeをVisible Meta Filesに設定すれば、表示されます。
Assetファイルの設定とmetaファイル
Assetファイルの設定は基本的にインスペクターウィンドウ上で行います。metaファイルには対応するAssetファイルの設定が記述、保管されているので、インスペクターウィンドウ上で設定を変更すると、それに合わせて、metaファイルも書き換えられます。
上の画像はインスペクターウィンドウ(画像左)とmetaファイル(画像右)の一部を抜き出したものです。赤い枠で囲んである部分を見てください。どちらもTextureType、TextureShapeと同じ名前です。要するに対応関係にあるので、インスペクターウィンドウの赤い枠の部分を変更するとmetaファイルの赤い枠の部分の数値が書き換えられます。
GUIDと参照関係
metaファイルにはAssetファイルを識別するための固有値、GUIDというものが記述されています。Unityでは、オブジェクト参照時にこのGUIDとFileIDというものを手がかりにします。
FileIDは、local identifier in fileのことであり、ファイル内のオブジェクトを識別するIDです。ファイル内で固有な値であるため、別のAssetファイル内のオブジェクト参照時にはAssetファイルの識別も必要となります。そこで、使用されるのがGUIDです。
以下はとあるスクリプトファイルに対応するmetaファイルです。
2行目にGUID、9、10行目に参照情報が記述されています。
9行目を日本語に訳すなら、「texという変数にはGUIDがf2f994c0d0f9b4a24b4c4615306b56efであるAssetファイル内のFileIDが2800000のオブジェクトから参照した値を格納する。」でしょうか。
metaファイルをコミットしないでプッシュしたら…
metaファイルを一緒にコミットせずにプッシュした場合、Assetファイルの設定や参照関係を引き継いでいないということになります。別の人がプッシュされたものをプルしてプロジェクトを開いても、参照が外れてしまっていたり、画像や音声ファイルの設定が作業前の状態に…なんてことに。
それだけならまだしも、プルした人たちのプロジェクト上にそれぞれ別々のmetaファイルが作成されるというめんどくさい事態も発生します。メインのブランチでやってしまうと修復がめんどくさいです。
このような事態が起こらないように、metaファイルは絶対にコミットしましょう。