[Unity] 资源工作流程 - ScriptedImporter
一、参考资料
二、说明
资源工作流程可分为:导入、创建、构建、分发、加载,五个步骤。Scripted Importer 属于“导入”部分的内容。
Unity 本身提供了大量的内置导入器,比如在添加图片文件到 Assets 目录时,会交由 TextureImporter 进行处理,Unity 弹出 Importing.. 提示,进行图片压缩等工作,生成 Library 缓存...
内置的导入器相当复杂,大部分的核心代码也是引擎不开源的 C/C++ 部分。而 Unity 提供了另一种可自定义的导入器:Scripted Importer,使用 C# 为 Unity 本身不支持的文件格式编写自定义资源导入器。
Scripted Importer 无法处理已由 Unity 本身处理的文件扩展名
三、ScriptedImporter
Unity 本身不识别 .lua 后缀的文件,如果直接移入 Asset 目录,则会由 DefaultImporter 赋予最基本的属性(旧版本也可能直接忽略不识别的文件)
所以 Lua 文件通常会加上 .txt 或者 .bytes 后缀,交由内置的 TextScriptImporter 进行导入。
或者也可以自行添加处理 .lua 后缀格式的导入器:
using UnityEngine;
using UnityEditor.AssetImporters;
using System.IO;
[ScriptedImporter(1, ".lua")]
public class LuaImporter : ScriptedImporter
{
public string luaPath;
public override void OnImportAsset(AssetImportContext ctx)
{
//Debug.Log("OnImportAsset");
luaPath = ctx.assetPath;
string luaTxt = File.ReadAllText(ctx.assetPath);
var assetText = new TextAsset(luaTxt);
ctx.AddObjectToAsset("main obj", assetText);
ctx.SetMainObject(assetText);
}
}
三、ScriptedImporterEditor
单击资源可在 Inspector 窗口中查看其设置,通过创建继承自 ScriptedImporterEditor 的类,可在对应 Importer 的资源编辑器面板中显示自定义内容:
using UnityEditor;
using UnityEditor.AssetImporters;
[CustomEditor(typeof(LuaImporter))]
public class LuaImporterEditor : ScriptedImporterEditor
{
public override void OnInspectorGUI()
{
LuaImporter importer = target as LuaImporter;
if (importer)
{
EditorGUILayout.LabelField(importer.luaPath);
EditorGUILayout.LabelField(importer.GetInstanceID()+"");
}
ApplyRevertGUI(); //默认的 Revert/Apply 显示
}
}