Version: 2017.1
프로그레시브 라이트매퍼(Progressive Lightmapper)
Look Dev

스크립트된 임포터

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

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

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

참고: 제한

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

예제

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

using UnityEditor.Experimental.AssetImporters;

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

    public override void OnImportAsset(AssetImportContext ctx)
    {
        // Main asset
        var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        ctx.SetMainAsset("MainAsset", cube);
        
        // Material as sub-asset
        string text = File.ReadAllText(ctx.assetPath, Encoding.UTF8);
        var channels = text.Split(',');
        var color = new Color(float.Parse(channels[0]) + m_ColorShift,
                              float.Parse(channels[1]) + m_ColorShift, 
                              float.Parse(channels[2]) + m_ColorShift);
        
        var material = new Material(Shader.Find("Standard")) { color = color };
        cube.GetComponent<Renderer>().material = material;
        ctx.AddSubAsset("Material", material);
    }
}

참고:

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

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

예를 들면, 다음과 같습니다.

using UnityEditor.Experimental.AssetImporters;

[CustomEditor(typeof(CubeImporter))]
public class CubeImporterEditor: ScriptedImporterEditor
{
    public override void OnInspectorGUI()
    {
        var prop = serializedObject.FindProperty("m_ColorShift");
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Color Shift");
        EditorGUILayout.PropertyField(prop )); 
        EditorGUILayout.EndHorizontal();
        // Important: call this at end!
        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 편집 리뷰 없이 페이지 수정됨

프로그레시브 라이트매퍼(Progressive Lightmapper)
Look Dev