Asynchronous Shader compilation
AssetDatabase

アセットの内部処理

Unity はアセットを自動的にインポートして、それらに関する様々な種類の追加データ (例えば、アセットのインポート設定や、プロジェクトを通してそのアセットを使用する個所) を管理します。以下で、この処理のしくみを説明します。

アセットをインポートするとき、Unity で行われていること

1. ユニーク ID の割り当て

テクスチャなどのアセットを Assets フォルダーに置くと、Unity は最初に、新しいファイルが追加されたことを検知します (エディターが、頻繁に既存のアセットリストと Assets フォルダーのコンテンツを比較確認します)。

まず、Unity は一意の ID をアセットに割り当てます。この ID は Unity の内部でアセットを照会するために使用されます。つまり、アセットへの参照を失うことなく、アセットを移動したり名前変更をすることができます。

2. .meta ファイルの作成

コンピュータ上にある Unity プロジェクトの Assets フォルダーと、 Unity 内の Project ウィンドウとの関係
コンピュータ上にある Unity プロジェクトの Assets フォルダーと、 Unity 内の Project ウィンドウとの関係

上記の画像では、Assetsフォルダー内に作成された各アセットとフォルダーのファイルシステムに .meta ファイルがリストされていることがわかります。これらは Unity の Project ウィンドウでは表示されません。 Unity はこれらのファイルを各アセットごとに作成しますが、デフォルトでは 非表示 なので、エクスプローラー/Finder でも表示されない場合があります。 Editor ウィンドウ (メインメニューの Edit > Project Settings を選択してから Edit Meta Files)への Mode 設定を選択すると表示されます。次に Editor を選択し、Version Control セクションに移動します)。

Unity が各アセットに割り当てる ID は、Unity がアセットファイル自体の横に作成する .meta ファイルの中に保存されます。この .meta ファイルは関連するアセットファイルと一緒に保管される必要があります。

重要 .meta ファイルはそれぞれのアセットファイルと対で一緒に保管されなければなりません。Unity の Project ウィンドウ内でアセットを移動したり名前を変更したりすると、Unity は自動的に対応する .meta ファイルの移動や名前変更をします。Unity 外部* (Windows エクスプローラーやMac の Finder) でアセットの移動や名前の変更を行う場合は、対応する .meta ファイルの移動や名前変更が必要です。

アセットの .meta ファイルが失われると (例えば、一致する .meta ファイルの移動や名称変更をせずに、Unity の外のアセットを移動したり名称変更した場合)、そのアセットへの参照は失われます。Unity は、まったく新しいファイルに行うのと同様に、移動や名称変更したアセットに対し新規の .meta ファイルを生成します。古い参照先を失った .meta ファイルは削除されます。

例えば、あるテクスチャアセットが、その .meta ファイルを失うと、そのテクスチャを使用していたすべてのマテリアルはそのテクスチャへの参照を失います。これを修正するために、テクスチャを必要とするすべてのマテリアルに手動で再割り振りしなくてはなりません。

スクリプトアセットが .meta ファイルを失うと、そのスクリプトを割り当てられたゲームオブジェクトやプレハブは、「スクリプトを割り当てられていない」コンポーネントになってしまい、機能を失います。これを修正するには、これらのオブジェクトに手動でスクリプトを再割り当てしなければなりません。

3. ソース アセットの処理

Unity は、Assets フォルダーに加えたどんなファイルも読み込んで処理し、ファイルコンテンツを内部のゲームにすぐに使えるバージョンのデータに変換します。実際のアセットファイルは変更なしのまま残り、処理され変換済のバージョンのデータは、プロジェクトの Library フォルダーに保存されます。

アセット用の内部形式を使用して、Unity は、ゲームにすぐ使えるバージョンのアセットをエディターの実行時にすぐ使用できるようにします。一方、アセットフォルダー内の変更なしのソースファイルはそのまま保たれ、素早く編集し、変更点を自動的にエディターに反映することができます。例えば、作業に便利な Photoshop ファイル形式は、便利で Assets フォルダーに直接保存できますが、モバイル機器や PC のグラフィックスカードなどのハードウェアでは、その形式を直接テクスチャとして描画することはできません。アセットを表す Unity 内部のすべてのデータは、キャッシュフォルダーと似た役割を果たす Library フォルダーに保存されます。ユーザーは、Library フォルダーを手動で変更すべきではありません。仮に手動で変更してしまうと、Unity エディターのプロジェクトが正常に機能しなくなります。ただし、すべてのデータは Assets フォルダーおよび Project Settings フォルダーに格納されているものから生成されるため、(Unity でプロジェクトが開かれていない間は) Library フォルダーを削除しても安全です。これは、Library フォルダーをバージョン管理に含むべきではない、という事でもあります。

1 回のインポートで複数アセットが作成される場合がある

アセットファイルが、複数のアセットを作成することがあります。それは、以下のような場合に発生します。

  • FBX などの 3D ファイルがマテリアルを定義し、かつ/または、埋め込まれたテクスチャを含む この場合、定義されたマテリアルと埋め込まれたテクスチャは取り出され、Unity 内で別のアセットとして扱われます。

  • 複数スプライトとしてインポートされた画像 Unity のスプライト エディターを使って、1 枚のグラフィックス画像から複数スプライトを定義することが可能です。この場合、エディターで定義される各スプライトは、Project ウィンドウで別々のスプライトアセットとして表示されます。

  • 3D ファイルが複数のアニメーションタイムラインを含むか、アニメーションのインポート設定内で定義された複数の別々のクリップを持つ この場合、複数アニメーションクリップはプロジェクトウィンドウ内で、別々のアニメーションクリップアセットとして表示されます。

インポート設定によりアセット処理の変更が可能

アセットに割り当てられた一意の ID と同様に、 .meta ファイルにはすべての インポート設定 の値が含まれます。この値は、Project ウィンドウでアセットを選択すると、インスペクターに表示されます。テクスチャの場合は、Texture Type、Wrap Mode、Filter Mode,Aniso Level などの設定が含まれます。

インポート設定をアセットごとに変更すると、その設定はアセットに紐づく .meta ファイルに保存されます。アセットはその新しい設定で再インポートされ、インポートされた関連する「ゲームにすぐ使える」データはプロジェクトの Library フォルダー内で更新されます。

プロジェクトをバックアップするときや、プロジェクトをバージョン管理のリポジトリに追加するとき、メインの Unity プロジェクトのフォルダー、すなわち AssetsProjectSettings の両方を含めるようにしてください。これらのフォルダーに含まれるすべての情報は Unity が動作するうえで重要な情報です。LibraryTemp フォルダーは含めなくても動作に影響はありません。

注意 明示的に有効にしないと、Unity 4.2 以前に作成されたプロジェクトには .meta ファイルがない可能性があります。.meta ファイルのないプロジェクトで Library フォルダーを削除してしまうと、永久にプロジェクトが壊れてしまい、元に戻すことが難しくなります。なぜなら、生成された内部形式アセット メタデータは Library フォルダーに保存されているからです。

Asynchronous Shader compilation
AssetDatabase