ScriptedImporter は Unity スクリプティング API の一部です。ScriptedImporter を使用すると、Unity にネイティブでサポートされていないファイル形式のために、C# でカスタムアセットインポーターを作成できます。
抽象クラス ScriptedImporter を特化し、ScriptedImporter 属性を適用してカスタムインポーターを作成します。これにより、カスタムインポーターが登録され、1 つまたは複数のファイル拡張子を処理します。登録されたファイル拡張子に一致する新規または変更されたファイルが Asset パイプラインによって検出されると、Unity はカスタムインポーターのメソッド OnImportAsset
を呼び出します。
注意: Scripted Importer は、すでに Unity によってネイティブに処理されているファイル拡張子は処理できません。
注意: 制限
これは Scripted Importer 機能の実験的なリリースであり、Unity Scripting API を使用して作成できるアセットに限定されています。 これは、この機能の実装または設計の制限ではありませんが、実際の使用には制限があります。
以下は、Scripted Importer の簡単な例です。拡張子が 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' は ゲームオブジェクトで、自動的にプレハブに転換されます
// ( 'Main Asset' だけがプレハブになります)
ctx.AddObjectToAsset("main obj", cube);
ctx.SetMainObject(cube);
var material = new Material(Shader.Find("Standard"));
material.color = Color.red;
// アセットには、インポート内で一貫した固有のID文字列を割り当てられる必要があります
ctx.AddObjectToAsset("my Material", material);
// インポート出力としてコンテキストに渡されないアセットは破棄する必要があります
var tempMesh = new Mesh();
DestroyImmediate(tempMesh);
}
}
ノート:
ScriptedImporter
属性を置くことによって、インポーターは Unity のアセットパイプラインに登録されます。ScriptedImporter
のベースクラスを実装します。OnImportAsset
の ctx 引数には、インポートイベントの入力データと出力データの両方が含まれます。SetMainAsset
への呼び出しを 1 回だけ発生させる必要があります。AddSubAsset
を呼び出します。また、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();
}
}
Scripted Importer のクラスをプロジェクトに加えると、Unity にサポートされるその他のネイティブのファイル形式同様に使用できます。
Alembic: Alembic インポータープラグインは Scripted Importer を使用して更新されています。詳しい情報は Unity github: AlembicImporter を参照してください。
USD: USD インポータープラグインは Scripted Importer を使用して更新されています。 詳しい情報は Unity github:: USDForUnity を参照してください。
2017.1 の新機能NewIn20171
2017–07–27 修正されたページ