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 回だけ発生させる必要があります。また、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();
}
}
ScriptedImporter クラスをプロジェクトに加えると、Unity にサポートされるその他のネイティブのファイル形式同様に使用できます。
Alembic: Alembic インポータープラグインは ScriptedImporter を使用して更新されています。詳しい情報は Unity github: AlembicImporter を参照してください。
USD: USD インポータープラグインは ScriptedImporter を使用して更新されています。
2017.1 の新機能NewIn20171
2017–07–27 編集レビュー 無しに修正されたページ - ページのフィードバックを残す
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.