Importer/Deleter

最終更新: 2020年1月30日

概述

Importer/Deleter是一个使用[AssetPostprocessor.OnPostprocessAllAssets()]的Unity Editor扩展功能。

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 _registry = new List();
    • private static List _registry = new List();
  • 它是一种在条目中注册Importer/Deleter的方法。
    • internal static void RegisterImporter(string fileExtension) where T : ICubismImporter
    • internal static void RegisterDeleter(string fileExtension) where T : ICubismDeleter
  • 它是一种从路径中获取支持类型Importer/Deleter的方法。
    • public static T GetImporterAtPath(string assetPath) where T : class, ICubismImporter
    • public static ICubismImporter GetImporterAtPath(string assetPath)
    • public static T GetDeleterAsPath(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);
    }
}
请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。