Support for custom Menu Item and Editor features
AssetDatabase

アセットの内部処理

Unity はアセットを自動的にインポートして、インポート設定が必要なさまざまな種類の追加データを管理することでプロジェクト内でアセットを使用できるようにします。以下で、この処理がどのように行われるか説明します。

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

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

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

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

2. .meta ファイルの作成

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

You’ll notice in the image above that there are .meta files listed in the file system for each asset and folder created within the Assets folder. These are not visible in Unity’s Project Window. Unity creates these files for each Asset, but they are hidden by default, so you may not see them in your Explorer/Finder either. You can make them visible by selecting the Mode setting to Visible Meta Files on the Editor window (main menu: Edit > Project Settings, then select the Editor category, and navigate to the Version Control section).

The ID that Unity assigns to each Asset is stored inside the .meta file which Unity creates alongside the asset file itself. This .meta file must stay with the asset file it relates to.

Important: .meta files must match and stay with their respective Asset files. If you move or rename an asset within Unity’s own Project window, Unity will also automatically move or rename the corresponding .meta file. If you move or rename an asset outside* of Unity (i.e. in Windows Explorer, or Finder on the Mac), you must move or rename the .meta file to match.

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

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

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

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

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

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

ときどき、1回のインポートで複数アセットが作成される

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

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

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

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

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

As well as the unique ID assigned to the asset, the meta files contain values for all the import settings you see in the inspector when you have an asset selected in your project window. For a texture, this includes settings such as the Texture Type, Wrap Mode, Filter Mode and Aniso Level.

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

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

注意: 明示的に有効となっていない場合、Unity 4.2 以前に作成されたプロジェクトは .meta ファイルがない可能性があります。.meta ファイルのない状態で Library フォルダーを削除してしまうと永久的にプロジェクトが壊れてしまい、元に戻すことが難しくなります。

Support for custom Menu Item and Editor features
AssetDatabase