Loading

[Unity] 资源工作流程 - ScriptedImporter

一、参考资料

  1. UnityDoc - 脚本化导入器 (Scripted Importer)
  2. Unity插件开发:使用ScriptedImporter优化Lua文件导入

二、说明

资源工作流程可分为:导入、创建、构建、分发、加载,五个步骤。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 显示
    }
}

图片1

posted @ 2022-04-01 15:05  野生西瓜  阅读(696)  评论(0编辑  收藏  举报