ScriptedImporter は Unity スクリプティング API の一部です。ScriptedImporter を使用すると、Unity にネイティブでサポートされていないファイル形式のために、C# でカスタムアセットインポーターを作成できます。
Create a custom importer by specializing the abstract class ScriptedImporter and applying the ScriptedImporter attribute. This registers your custom importer to handle one or more file extensions. When a file matching the registered file extensions is detected by the Asset pipeline as being new or changed, Unity invokes the method OnImportAsset
of your custom importer.
注意: Scripted Importer は、すでに Unity によってネイティブに処理されているファイル拡張子は処理できません。
注意: 制限
これは Scripted Importer 機能の実験的なリリースであり、Unity Scripting API を使用して作成できるアセットに限定されています。 これは、この機能の実装または設計の制限ではありませんが、実際の使用には制限があります。
以下は、Scripted Importer の簡単な例です。拡張子が cube のアセットファイルを、キューブプリミティブの Unity プレハブにメインアセットとしてインポートします。また、アセットファイルからフェッチしたカラーのデフォルトマテリアルをインポートします。
using UnityEditor.Experimental.AssetImporters;
[ScriptedImporter(1, "cube")]
public class CubeImporter : ScriptedImporter
{
float m_ColorShift = 0f;
public override void OnImportAsset(AssetImportContext ctx)
{
// Main asset
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
ctx.SetMainAsset("MainAsset", cube);
// Material as sub-asset
string text = File.ReadAllText(ctx.assetPath, Encoding.UTF8);
var channels = text.Split(',');
var color = new Color(float.Parse(channels[0]) + m_ColorShift,
float.Parse(channels[1]) + m_ColorShift,
float.Parse(channels[2]) + m_ColorShift);
var material = new Material(Shader.Find("Standard")) { color = color };
cube.GetComponent<Renderer>().material = material;
ctx.AddSubAsset("Material", material);
}
}
ノート:
ScriptedImporter
属性を置くことによって、インポーターは Unity のアセットパイプラインに登録されます。ScriptedImporter
のベースクラスを実装します。OnImportAsset
の ctx 引数には、インポートイベントの入力データと出力データの両方が含まれます。SetMainAsset
への呼び出しを 1 回だけ発生させる必要があります。You may also implement a custom Import Settings Editor by specializing ScriptedImporterEditor class and decorating it with the class attribute CustomEditor
to tell it what type of importer it is used for.
以下のような点が含まれます。
using UnityEditor.Experimental.AssetImporters;
[CustomEditor(typeof(CubeImporter))]
public class CubeImporterEditor: ScriptedImporterEditor
{
public override void OnInspectorGUI()
{
var prop = serializedObject.FindProperty("m_ColorShift");
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Color Shift");
EditorGUILayout.PropertyField(prop ));
EditorGUILayout.EndHorizontal();
// Important: call this at end!
base.ApplyRevertGUI();
}
}
ScriptedImporter クラスをプロジェクトに加えると、Unity にサポートされるその他のネイティブのファイル形式同様に使用できます。
Alembic: Alembic インポータープラグインは ScriptedImporter を使用して更新されています。詳しい情報は Unity github: AlembicImporter を参照してください。
USD: USD インポータープラグインは ScriptedImporter を使用して更新されています。
2017.1 の新機能NewIn20171
2017–07–27 編集レビュー 無しに修正されたページ - ページのフィードバックを残す