스크립트된 임포터는 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 클래스에 배치하여 임포터가 Unity의 에셋 파이프라인에 등록됩니다.ScriptedImporter 기본 클래스를 구현합니다.SetMainAsset 호출을 하나만 생성해야 합니다.AddSubAsset 호출을 필요한 수만큼 생성할 수 있습니다.
ScriptedImporterEditor 클래스를 특수화하고 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 임포터 플러그인은 스크립트된 임포터를 사용합니다. 자세한 내용은 USD Importer 패키지 기술 자료를 참조하십시오.