스크립트된 임포터(Scripted Importers)는 Unity 스크립팅 API의 일부입니다. 스크립트된 임포터를 사용하여 C#에서 커스텀 에셋 임포터를 작성하고, 이를 통해 Unity에서 기본으로 지원되지 않는 파일 포맷에 대한 지원을 직접 추가할 수 있습니다.
ScriptedImporter 추상 클래스를 특수화하고 ScriptedImporter 속성을 적용하여 커스텀 임포터를 생성할 수 있습니다. 이렇게 하면 커스텀 임포터가 하나 이상의 파일 확장자를 처리하도록 등록됩니다. 등록된 파일 확장자와 일치하는 파일이 에셋 파이프라인에서 새 파일이나 변경된 파일로 인식되면, Unity 에디터가 커스텀 임포터의 OnImportAsset
메서드를 호출합니다.
참고: 스크립트화된 임포터는 Unity에서 기본적으로 처리하는 파일 확장자를 처리할 수 없습니다.
다음은 스크립트된 임포터의 간단한 예제입니다. 이 예제에서는 확장자가 “cube”인 에셋 파일을 큐브 프리미티브가 주 에셋이며 기본 머티리얼과 컬러가 있는 Unity 프리팹으로 임포트하고, 에셋 파일의 값을 판독하여 위치를 할당합니다.
using UnityEngine;
using UnityEditor.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 GameObject and will be automatically converted into a prefab
// (Only the 'Main Asset' is eligible 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);
}
}
참고:
ScriptedImporter
속성을 CubeImporter 클래스에 배치하여 에셋 파이프라인에 등록됩니다.ScriptedImporter
기본 클래스(base class)를 구현합니다.OnImportAsset
의 ctx 인수는 임포트 이벤트의 입력 및 출력 데이터를 모두 포함합니다.SetMainAsset
호출을 하나만 생성해야 합니다.AddSubAsset
호출을 필요한 수만큼 생성할 수 있습니다.[ScriptedImporterEditor]((../ScriptReference/AssetImporters.ScriptedImporterEditor.html) 클래스를 특수화하고 CustomEditor
클래스 속성으로 꾸며 어떤 타입의 임포터에 사용되는지 알려서 커스텀 임포트 설정 에디터를 구현할 수도 있습니다.
예제:
using UnityEditor;
using UnityEditor.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 에디터에서 지원되는 기타 네이티브 파일 유형과 똑같이 사용할 수 있습니다.
Alembic: Alembic 임포터 플러그인은 스크립트된 임포터를 사용하도록 업데이트되었습니다. 자세한 내용은 Unity github: AlembicImporter 페이지를 참조하십시오.
USD: USD 임포터 플러그인은 스크립트된 임포터를 사용하도록 업데이트되었습니다. 자세한 내용은 Unity github:: USDForUnity 페이지를 참조하십시오.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.