• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Unity插件开发:使用ScriptedImporter优化Lua文件导入

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

        Lua作为Unity首选的热更新方式,现在基本上成了商业游戏的标配(iOS的机制)。同时不得不说的是,使用Lua,可以避开大型项目中长时间编译的问题(其实这个问题在新版本的Unity中已经解决)。还有一个好处是,服务器可以推送一段Lua代码到客户端,相当于做实时Patch,维护非常高效。但是又不得不提,Lua是一个坑,开发效率和游戏运行性能都会受到一定的影响。所以使用者一定要在适当的环境下使用,莫要一概而全。

       回到正题,这里处于个人习惯,使用tolua#(简称tolua)。tolua打包lua代码时有个流程,十分不友好。它会将.lua文件复制到temp文件夹下,并改名为.byte文件,然后将这些.byte文件打包成AssetBundle。但是如果我们开发了很多文件,就会在项目中生成大量的无用的.byte文件。究其原因,是因为unity无法识别.lua文件,所以无法打包到Assetbundle中。

       所以我们要做的是借助ScriptedImporter帮助Unity识别.lua文件。

       ScriptedImporter是Unity2017.1引入的功能,使用它,我们可以让Unity识别很多它无法识别的文件,比如Excel(.xlsx)文件,自定义的一些后缀的文件。见《Unity插件开发:ScriptedImporter和AssetImporter》

       根据上文中提到的造成tolua生成的原因,我们只要把.lua文件识别为一个TextAsset就能解决问题,因为.byte文件本身就被Unity识别为TextAsset。所以我们可以写一个LuaImporter,继承于ScriptedImporter,读取文件的文本生成一个TextAsset作为被识别的物体即可

       LuaImporter.cs

using System.IO;
using UnityEditor;
using UnityEditor.Experimental.AssetImporters;
using UnityEngine;

[ScriptedImporter(1, "lua")]
public class LuaImporter : ScriptedImporter
{
    public override void OnImportAsset(AssetImportContext ctx)
    {
        var text = File.ReadAllText(ctx.assetPath);
        var asset = new TextAsset(text);
        ctx.AddObjectToAsset("main obj", asset);
        ctx.SetMainObject(asset);
    }
}

        将LuaImporter.cs放在工程的Editor文件夹下,编译完成后,项目会自动重新导入所有的.lua文件。通过下图我们可以看到无法识别.lua文件的样子

       通过LuaImporter之后Unity将.lua文件识别为TextAsset,不仅图标变了,右侧还显示出了代码。

       但是我们看C#代码的时候,细心的可以看到是这样的情况

      那么我们是否也能实现的,答案是肯定的。Unity提供ScriptedImporterEditor来绘制自定义Importer的Import面板展现。

[CustomEditor(typeof(LuaImporter))]
public class LuaImporterEditor : ScriptedImporterEditor
{
    public override void OnInspectorGUI()
    {
    }
}

       其本质还是一个Editor,所以也可以按照自己的需求自定义Import面板。这里什么都不写,就是什么都不要。所以结果如下图所示

       OK至此就完成了.lua的识别工作。

       至于打包的方法就很简单了,直接打包这些.lua文件即可。

       如果你项目中有那些需要识别但是Unity无法识别的文件的话,使用ScriptedImporter吧。

参考文档

https://docs.unity3d.com/Manual/ScriptedImporters.html

https://docs.unity3d.com/ScriptReference/Experimental.AssetImporters.ScriptedImporter.html

https://docs.unity3d.com/ScriptReference/Experimental.AssetImporters.ScriptedImporterEditor.html

tolua#开源库

https://github.com/topameng/tolua


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua:游戏中的Lua发布时间:2022-07-22
下一篇:
lua使用笔记1:Linux中安装lua发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap