Importer/Deleter

最終更新: 2020年1月30日

概要

Importer/Deleterは[AssetPostprocessor.OnPostprocessAllAssets()]を利用したUnityエディターの拡張機能です。

OnPostprocessAllAssetsは任意の数のアセットのインポートが完了した後に呼び出されて、引数からインポート、削除したアセットのパスを取得することが出来ます。

Importer/Deleter機能は取得したパスから対応のImporter/Deleterの処理を呼び出されます。

// インポートされたアセットのパスからインポーターを取得してインポート処理を実行
foreach (var assetPath in importedAssetPaths)
{
    var importer = CubismImporter.GetImporterAtPath(assetPath);

    if (importer == null)
    {
        continue;
    }

    importer.Import();
}

// インポートされたアセットのパスからインポーターを取得してインポート処理を実行
foreach (var assetPath in deletedAssetPaths)
{
    var deleter = CubismDeleter.GetDeleterAsPath(assetPath);

    if (deleter == null)
    {
        continue;
    }

    deleter.Delete();
}

この処理は`CubismAssetProcessor.OnPostprocessAllAssets()`で行っています。

CubismImporter / CubismDeleter

Importer/Deleterをまとめたクラスとなります。

  • Importer/Deleterのタイプと対象ファイルの拡張子を関連付けるための構造体です。
    • ImporterEntry
    • DeleterEntry
  • エントリーを格納するリストです。
    • private static List<ImporterEntry> _registry = new List<ImporterEntry>();
    • private static List<DeleterEntry> _registry = new List<DeleterEntry>();
  • エントリーにImporter/Deleterを登録するメソッドです。
    • internal static void RegisterImporter<T>(string fileExtension) where T : ICubismImporter
    • internal static void RegisterDeleter<T>(string fileExtension) where T : ICubismDeleter
  • パスから対応タイプのImporter/Deleterを取得するメソッドです。
    • public static T GetImporterAtPath<T>(string assetPath) where T : class, ICubismImporter
    • public static ICubismImporter GetImporterAtPath(string assetPath)
    • public static T GetDeleterAsPath<T>(string assetPath) where T : class, ICubismDeleter
    • public static ICubismDeleter GetDeleterAsPath(string assetPath)

ICubismImporter/ICubismDeleter

  • アセットのパスをセーブする処理。
    • SetAssetPath(string value)
  • Importer/Deleterの処理。
    • Import()/Delete()
  • ImporterのインターフェイスでImporterをセーブしてアセットを再インポートする処理。
    • Save()

CubismImporterBase / CubismDeleterBase

ICubismImporter/ICubismDeleterインターフェイスを継承してImporter/Deleterの基底クラスとなります。

Importerの実装例

using Live2D.Cubism.Editor.Importers;

public sealed class ImporterCustomization : CubismImporterBase
{
    private static string _extension = ".asset";

    [UnityEditor.InitializeOnLoadMethod]
    private static void RegisterImporter()
    {
        CubismImporter.RegisterImporter<ImporterCustomization>(_extension);
    }

    public override void Import()
    {
        UnityEngine.Debug.Log("Asset Import as path : " + AssetPath);
    }
}

Deleterの実装例

using Live2D.Cubism.Editor.Deleters;

public sealed class DeleterCustomization : CubismDeleterBase
{
    private static string _extension = ".asset";

    [UnityEditor.InitializeOnLoadMethod]
    private static void RegisterDeleter()
    {
        CubismDeleter.RegisterDeleter<DeleterCustomization>(_deleterAssetExtension);
    }

    public override void Delete()
    {
        UnityEngine.Debug.Log("Asset deleted as path : " + AssetPath);
    }
}
この記事はお役に立ちましたか?
はいいいえ
この記事に関するご意見・
ご要望をお聞かせください。