[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

作者:wildmelon

出处:https://www.cnblogs.com/wildmelon/p/16087056.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)」许可协议进行许可。

作品中所包含的外部插件源代码、图片、资源和链接库等,如希望在其他场景使用,请务必确认符合其本身授权规范。

posted @   野生西瓜  阅读(820)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示