Importer/Deleter

업데이트: 2020/01/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 _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);
    }
}
이 기사가 도움이 되었나요?
아니요
이 기사에 관한 의견 및 요청사항을 보내 주시기 바랍니다.