Importer/Deleter

最終更新: 2020年1月30日

このページはCubism 4.2以前の古いバージョン向けです。 最新のページはこちら

概要

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

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// インポートされたアセットのパスからインポーターを取得してインポート処理を実行
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();
}
// インポートされたアセットのパスからインポーターを取得してインポート処理を実行 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(); }
// インポートされたアセットのパスからインポーターを取得してインポート処理を実行
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の実装例

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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);
}
}
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); } }
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の実装例

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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);
}
}
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); } }
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);
    }
}
この記事はお役に立ちましたか?
はいいいえ
この記事に関するご意見・
ご要望をお聞かせください。