Version: 2019.2
실험 기능
Look Dev

스크립트된 임포터

스크립트된 임포터(Scripted Importers)는 Unity 스크립팅 API의 일부입니다. 스크립트된 임포터를 사용하여 Unity 에디터에서 기본으로 지원되지 않는 파일 포맷에 대해 C#에서 커스텀 에셋 임포터를 작성할 수 있습니다.

ScriptedImporter 추상 클래스를 특수화하고 ScriptedImporter 속성을 적용하여 커스텀 임포터를 생성합니다. 이렇게 하면 커스텀 임포터가 하나 이상의 파일 확장자를 처리하도록 등록됩니다. 등록된 파일 확장자와 일치하는 파일이 에셋 파이프라인에서 새 파일이나 변경된 파일로 인식되면, Unity 에디터가 커스텀 임포터의 OnImportAsset 메서드를 호출합니다.

참고: 스크립트된 임포터는 Unity 에디터에서 기본적으로 처리하는 파일 확장자를 처리할 수 없습니다.

참고: 제한

스크립트된 임포터 기능은 아직 실험적인 릴리스이므로 Unity 스크립팅 API를 사용하여 생성할 수 있는 에셋에만 제한됩니다. 이 제한은 이 기능의 구현 또는 설계와 관련된 제한 사항은 아니지만, 실제 사용에서는 제한 사항으로 작동합니다.

예제

다음은 스크립트된 임포터의 간단한 예제입니다. 이 예제에서는 확장자가 “cube”인 에셋 파일을 큐브 프리미티브가 주 에셋인 Unity 프리팹과 에셋 파일에서 페치한 컬러의 기본 머티리얼로 임포트합니다.

using UnityEngine;
using UnityEditor.Experimental.AssetImporters;
using System.IO;

[ScriptedImporter(1, "cube")]
public class CubeImporter : ScriptedImporter
{
    public float m_Scale = 1;

    public override void OnImportAsset(AssetImportContext ctx)
    {
        var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        var position = JsonUtility.FromJson<Vector3>(File.ReadAllText(ctx.assetPath));

        cube.transform.position = position;
        cube.transform.localScale = new Vector3(m_Scale, m_Scale, m_Scale);

        // 'cube' is a a GameObject and will be automatically converted into a prefab
        // (Only the 'Main Asset' is elligible to become a Prefab.)
        ctx.AddObjectToAsset("main obj", cube);
        ctx.SetMainObject(cube);

        var material = new Material(Shader.Find("Standard"));
        material.color = Color.red;

        // Assets must be assigned a unique identifier string consistent across imports
        ctx.AddObjectToAsset("my Material", material);

        // Assets that are not passed into the context as import outputs must be destroyed
        var tempMesh = new Mesh();
        DestroyImmediate(tempMesh);
    }
}

참고:

  • 임포터는 Unity 에디터의 ScriptedImporter 속성을 CubeImporter 클래스에 배치하여 에셋 파이프라인에 등록됩니다.
  • CubeImporter 클래스는 추상 ScriptedImporter 기본 클래스(base class)를 구현합니다.
  • OnImportAsset의 ctx 인수는 임포트 이벤트의 입력 및 출력 데이터를 모두 포함합니다.
  • 각 임포트 이벤트는 SetMainAsset 호출을 하나만 생성해야 합니다.
  • 각 임포트 이벤트는 AddSubAsset 호출을 필요한 수만큼 생성할 수 있습니다.
  • 자세한 내용은 스크립팅 API 문서를 참조하십시오.

ScriptedImporterEditor 클래스를 특수화하고 CustomEditor 클래스 속성으로 꾸며 어떤 타입의 임포터에 사용되는지 알려서 커스텀 임포트 설정 에디터를 구현할 수도 있습니다.

예제:

using UnityEditor;
using UnityEditor.Experimental.AssetImporters;
using UnityEditor.SceneManagement;
using UnityEngine;

[CustomEditor(typeof(CubeImporter))]
public class CubeImporterEditor: ScriptedImporterEditor
{
    public override void OnInspectorGUI()
    {
        var colorShift = new GUIContent("Color Shift");
        var prop = serializedObject.FindProperty("m_ColorShift");
        EditorGUILayout.PropertyField(prop, colorShift);
        base.ApplyRevertGUI();
    }
}

스크립트된 임포터 사용

스크립트된 임포터 클래스를 프로젝트에 추가한 후 Unity 에디터에서 지원되는 기타 네이티브 파일 유형과 똑같이 사용할 수 있습니다.

  • 지원되는 파일을 에셋 디렉토리 계층 구조에 끌어다 놓아 임포트합니다.
  • Unity 에디터를 다시 시작하면 최근 업데이트 후에 변경된 파일이 다시 임포트됩니다.
  • 디스크에 있는 에셋 파일을 편집하고 Unity 에디터로 돌아가면 임포트가 다시 실행됩니다.
  • Asset > Import New Asset… 을 선택하여 새 에셋을 임포트합니다.
  • Asset > Reimport 메뉴를 사용하여 다시 임포트하도록 실행합니다.
  • 에셋을 클릭하여 인스펙터 창에서 에셋의 설정을 확인합니다. 설정을 수정하려면 인스펙터 창에서 편집한 후 Apply 를 클릭합니다.

스크립트된 임포터로 임포트한 에셋(An Alembic Girl)의 인스펙터 창
스크립트된 임포터로 임포트한 에셋(An Alembic Girl)의 인스펙터 창

스크립트된 임포터의 실제 사용

  • Alembic: Alembic 임포터 플러그인은 스크립트된 임포터를 사용하도록 업데이트되었습니다. 자세한 내용은 Unity github: AlembicImporter 페이지를 참조하십시오.

  • USD: USD 임포터 플러그인은 스크립트된 임포터를 사용하도록 업데이트되었습니다. 자세한 내용은 Unity github:: USDForUnity 페이지를 참조하십시오.




  • Unity 2017.1의 새로운 기능NewIn20171

  • 2017–07–27 페이지 수정됨

실험 기능
Look Dev