Unity 스크립트화된 임포터 가이드
이 문서에서는 Unity의 스크립트화된 임포터(Scripted Importer) 기능에 대한 기본적인 내용과 활용 예제를 설명합니다. 스크립트화된 임포터는 Unity에서 지원하지 않는 파일 포맷을 사용자 정의로 지원할 수 있게 해줍니다.
스크립트화된 임포터란?
스크립트화된 임포터는 Unity의 스크립팅 API의 일부로, 사용자 정의 파일 포맷을 Unity에 통합하기 위해 C# 스크립트를 작성하는 기능입니다. 스크립트화된 임포터를 작성하면 특수한 파일 확장자를 처리할 수 있는 커스텀 임포터를 만들 수 있습니다.
기본 사용법
스크립트화된 임포터를 만들기 위해서는 ScriptedImporter 클래스를 상속받고, 생성자를 통해 처리할 파일 확장자를 등록해야 합니다. 아래는 cube라는 확장자를 처리하는 기본적인 임포터의 코드입니다.
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);
ctx.AddObjectToAsset("main obj", cube);
ctx.SetMainObject(cube);
var material = new Material(Shader.Find("Standard"));
material.color = Color.red;
ctx.AddObjectToAsset("my Material", material);
var tempMesh = new Mesh();
DestroyImmediate(tempMesh);
}
}
주요 메서드 설명
OnImportAsset: 에셋이 임포트될 때 호출되는 메서드입니다. 여기서 임포트할 게임 오브젝트와 머티리얼을 생성합니다.ctx.AddObjectToAsset: 에셋으로 추가할 객체를 등록합니다.ctx.SetMainObject: 메인 에셋을 설정합니다.
커스텀 인스펙터 만들기
스크립트화된 임포터에 대한 커스텀 에디터를 만들려면 ScriptedImporterEditor 클래스를 상속받아 OnInspectorGUI 메서드를 구현하면 됩니다. 아래 예제를 참고하세요.
using UnityEditor;
using UnityEditor.AssetImporters;
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();
}
}
임포터 사용법
스크립트화된 임포터를 프로젝트에 추가한 후에는 일반적인 파일 임포트 방법을 사용할 수 있습니다. 에셋 파일을 프로젝트 폴더에 드래그 앤 드롭하거나, 메뉴에서 Asset > Import New Asset…을 선택하여 임포트할 수 있습니다.
임포트 시나리오
| 시나리오 | 설명 |
|---|---|
| 파일 드래그 앤 드롭 | 에셋 폴더에 지원되는 파일을 드래그하여 임포트 |
| 에셋 신규 임포트 | Asset > Import New Asset… 메뉴 사용 |
| 에셋 재임포트 | 변화를 감지하여 자동으로 재임포트 |
실제 사례
- Alembic 임포터: Alembic 데이터 형식을 위한 스크립트화된 임포터가 존재합니다. 이 임포터는 복잡한 애니메이션 데이터를 Unity에 통합하는 데 사용됩니다.
- USD 임포터: USD 파일 형식을 지원하는 임포터로, 다양한 3D 소프트웨어에서 제작된 파일을 쉽게 임포트할 수 있습니다.
스케일과 같은 추가 속성을 사용자 정의하여 작업을 최적화할 수 있으며, 필요에 따라 다양한 형식으로 자신만의 임포터를 만들 수 있습니다.
결론
Unity의 스크립트화된 임포터는 다양한 파일 포맷을 통합하는 강력한 도구입니다. 이 기능을 통해 특정 형식의 데이터 파일을 사용할 수 있는 방법을 제공하며, 유연한 커스터마이징도 가능합니다. 스크립트화된 임포터를 활용하여 프로젝트에서 필요한 모든 유형의 에셋을 효율적으로 관리해 보세요.