大きなプロジェクトの場合、同じタイプのアセットをインポートするためにいくつかのプリセットを使用する場合があります。例えば、テクスチャアセットの場合、デフォルトのテクスチャをインポートするためのプリセットと、ライトマップテクスチャのためのプリセットが必要な場合があります。プロジェクトの Assets フォルダーには、これらのテクスチャのタイプごとに別々のフォルダーがあります。
The following script applies a Preset based on the folder that you add an asset to. This script chooses the Preset that is in the same folder as the asset. If there is no Preset in the folder, this script searches parent folders. If there are no Presets in parent folders, Unity uses the default Preset that the Preset Manager specifies.
このスクリプトを使用するには、Project ウィンドウで Editor という名前の新しいフォルダーを作成し、このフォルダーに新しい C# スクリプトを作成し、このスクリプトをコピーして貼り付けます。
using System.IO;
using UnityEditor;
using UnityEditor.Presets;
public class PresetImportPerFolder : AssetPostprocessor
{
void OnPreprocessAsset()
{
// 最初にアセットをインポートするときに、プリセットを適用するように確認します
if (assetImporter.importSettingsMissing)
{
// インポートされた現在のアセットフォルダーを取得します
var path = Path.GetDirectoryName(assetPath);
while (!string.IsNullOrEmpty(path))
{
// このフォルダー内のすべてのプリセットアセットを見つけます
var presetGuids = AssetDatabase.FindAssets("t:Preset", new[] { path });
foreach (var presetGuid in presetGuids)
{
// サブフォルダー内のプリセットをテストしていないことを確認します
string presetPath = AssetDatabase.GUIDToAssetPath(presetGuid);
if (Path.GetDirectoryName(presetPath) == path)
{
// プリセットをロードし、インポーターに適用します
var preset = AssetDatabase.LoadAssetAtPath<Preset>(presetPath);
if (preset.ApplyTo(assetImporter))
return;
}
}
// 親フォルダーで再度行います
path = Path.GetDirectoryName(path);
}
}
}
}