Version: 2019.4
言語: 日本語
ストリーミングアセット
スクリプトによるソースアセットの変更

アセットにフォルダーごとのデフォルトを適用

大きなプロジェクトの場合、同じタイプのアセットをインポートするためにいくつかのプリセットを使用する場合があります。例えば、テクスチャアセットの場合、デフォルトのテクスチャをインポートするためのプリセットと、ライトマップテクスチャのためのプリセットが必要な場合があります。プロジェクトの Assets フォルダーには、これらのテクスチャのタイプごとに別々のフォルダーがあります。

TexturesDefault と TexturesLighting フォルダー。それぞれのプリセットがあります
TexturesDefaultTexturesLighting フォルダー。それぞれのプリセットがあります

次のスクリプトは、アセットを加えるフォルダーに基づいてプリセットを適用します。このスクリプトは、アセットと同じフォルダーにあるプリセットを選択します。フォルダーにプリセットがない場合、このスクリプトは親フォルダーを検索します。親フォルダーにプリセットがない場合、Preset ウィンドウで指定されているデフォルトのプリセットを使用します。

このスクリプトを使用するには、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);
            }
        }
    }
}

2017–03–27 公開ページ 2018.1 の新機能NewIn20181

ストリーミングアセット
スクリプトによるソースアセットの変更