Unity はアセットをインポートすると、アセットに関する追加データ (例えば、アセットのインポートに使用するインポート設定やプロジェクト内でアセットを使用する場所など) の保存と管理も行います。以下で、この処理の仕組みを説明します。
.meta ファイルが作成されます。アセットの処理方法は、各アセットの インポート設定 の影響を受けます。アセットファイルやアセットのインポート設定を変更すると、Unity はアセットを再インポートします。詳細は、 アセットとそのインポート設定 を参照してください。
Unity エディターは、Assets フォルダーのコンテンツをすでに用意されているアセットリストと頻繁に照合します。そのため、アセットを Assets フォルダーに配置すると、Unity は新しいファイルが追加されたことを検出します。
Unity は新しいファイルを見つけると、固有の ID をアセットに割り当てます。これは Unity がアセットを参照するために内部的に使用する ID で、Unity は何も壊すことなくアセットの移動や名前の変更を行うことができます。
ID は通常、エディターでは表示されません。
下の画像は、Unity がプロジェクトの Assets フォルダー内の各アイテムに対して作成する .meta ファイルです。Unity はアセットファイルやフォルダーに対してメタファイルを作成します。
これらのファイルは Unity の Project ウィンドウでは隠されており、ファイルシステムでもデフォルトで隠されている可能性があります (Wikipedia: Hidden file and hidden directory)。そのため、使用しているコンピューターで隠しファイルを表示するようにしないと、Windows エクスプローラーや Finder に表示されない場合があります。
Assets フォルダー、.meta ファイル、Unity の Project ウィンドウの関係この例は、Unity がプロジェクトの Assets フォルダー内の各アセットまたはフォルダーに対して .meta ファイルを作成して、それらがシステムファイルブラウザーに表示されることを示しています。ただし、これらの .meta ファイルはデフォルトで非表示になっているため、Project ウィンドウには表示されません。表示するには、Mode プロジェクト設定を開いて、Visible Meta Files を有効にします。
Unity はアセットの .meta ファイルを作成するときに、.meta ファイル内にアセット ID を書き込み、アセットファイルと同じ場所にその .meta ファイルを保存します。
.meta ファイルには、アセットに割り当てられた固有の ID と、Project ウィンドウでアセットを選択すると Inspector ウィンドウに表示されるすべての インポート設定 の値が含まれています。例えば、テクスチャ の場合、インポート設定の Texture Type、Wrap Mode、Filter Mode、Aniso Level の値が含まれます。
アセットのインポート設定を変更すると、新しい設定は アセットに付随する .meta ファイルに保存されます。Unity は更新された設定に従ってアセットを再インポートし、プロジェクトの Library フォルダー内の対応するインポートされた “ゲーム対応” データを更新します。
重要: メタファイルには、プロジェクトでアセットがどのように使用されるべきかに関する重要な情報が含まれており、関連するアセットファイルに保管されている必要があります。Project ウィンドウでアセットを移動/名前変更すると、Unity は自動的に対応する .meta ファイルも移動/名前変更します。ただし、Unity 以外の場所 (Windows のエクスプローラーや macOS の Finder) でアセットを移動/名前変更した場合は、それに合わせて .meta ファイルの移動/名前変更を行う必要があります。
アセットがメタファイルを失うと (例えば、Unity の外部でアセットの移動/名前変更を行ったが、対応する .meta ファイルの移動/名前変更を行わない場合)、プロジェクト内のそのアセットへの参照はすべて壊れます。この場合、Unity は、アセットに対応するメタファイルがないことを認識し、移動/名前変更されたアセットに対して、新しいアセットと同じように新しいメタファイルを生成し、古い “孤立した” .meta ファイルを削除します。
この処理は、プロジェクトに以下のような大きな問題を引き起こす可能性があります。
例:
* テクスチャアセットが .meta ファイルを失うと、そのテクスチャを使っていたすべてのマテリアルはテクスチャへの参照を失います。これを修正するには、そのテクスチャを必要とするマテリアルに手動でテクスチャを再割り当てする必要があります。
* スクリプトアセットが .meta ファイルを失うと、そのスクリプトが割り当てられているゲームオブジェクトやプレハブは、代わりに “割り当てされていないスクリプト” コンポーネントを持つことになり、その機能を失います。この問題を修正するには、そのスクリプトを必要とするゲームオブジェクトに手動でスクリプトを再割り当てする必要があります。
Unity では、プロジェクトの Assets フォルダー内の各フォルダーに、独自の .meta ファイルを割り当てます。ただし、バージョン管理システム (VCS) の中には、空のフォルダーを保存できないものがあります。つまり、プロジェクトに空のフォルダーを追加/削除すると、VCS は追加/削除された .meta ファイルを保存しますが、フォルダー自体の追加/削除の変更を保存しないため、混乱や問題が発生する可能性があります。
この問題を解決するために、Unity は空のフォルダーに関して以下のような特定の動作をします。
Unity が対応するメタファイルを持たない空のフォルダーを検出すると、そのフォルダーに以前メタファイルがあった場合、VCS の他のユーザーによるフォルダーの削除によってメタファイルが削除されたとみなし、その空のフォルダーをローカルで削除します。
Unity があるフォルダーの新しいメタファイルを検出したがそのフォルダーがローカルに存在しない場合、Unity は新しいメタファイルが VCS の他のユーザーによるフォルダーの追加によって作成されたものとみなし、対応する空のフォルダーをローカルに作成します。