xLua icon indicating copy to clipboard operation
xLua copied to clipboard

能讲讲LuaAsset/LuaImporter相关的用法吗

Open oOtroyOo opened this issue 3 years ago • 8 comments

就是刚新搭建的项目,忽然发现Unity能识别.lua的文件了,而不是从前的教程中说的 需要改成.lua.txt。 一路发现了 这次今年的提交 #c2cbaf8d 。 新增有 LuaImporterLuaAssetXXTEA 这些文件。似乎是关于导入和加密的 不过我并没有查到怎么使用。简单的require似乎找不到文件。

oOtroyOo avatar Aug 01 '21 07:08 oOtroyOo

实际上我觉得只保留这样的LuaImporter,让Unity能够将lua识别为TextAsset就够了。未必要用LuaAsset之中的内容。

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

}

oOtroyOo avatar Aug 02 '21 05:08 oOtroyOo

这是外部提交的PR。 加密我觉得确实没啥用,打算删了。

chexiongsheng avatar Aug 03 '21 08:08 chexiongsheng

我能理解这种做法。不过仍然有疑问。

  • 比如立即编译lua源码成unity资源,确实不错,但是默认情况缺少luac.exe。又不是人人都配了build环境去编译。我看了一下批处理读的是VS2015和2017的库,我装的是VS2019啊。不想配编译。又不知道哪里去搞exe
  • 密码直接写在了LuaAsset文件里面,如果我想保持xlua目录干净,以备和最新官方源码一致。则必须要改这个文件就不行了。
  • LuaAsset这个Require方法走的还是Resourses。所以还是得去自己实现Require方法。显得LuaAsset没有意义

oOtroyOo avatar Aug 03 '21 08:08 oOtroyOo

实际上我觉得只保留这样的LuaImporter,让Unity能够将lua识别为TextAsset就够了。未必要用LuaAsset之中的内容。

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

}

合理,你提议的,你提个PR过来吧?

chexiongsheng avatar Aug 04 '21 01:08 chexiongsheng

这涉及要删代码,不敢提。😂

oOtroyOo avatar Aug 04 '21 02:08 oOtroyOo

我又去看了看源码。2018以下 new TextAsset()不支持带参数。而text字段只有get,走底层了。应该兼容不了。除非有另外能找到new出来的办法。还是得留一个LuaAsset

oOtroyOo avatar Aug 05 '21 17:08 oOtroyOo

我主要是用luaasset.GetDecodeBytes()返回bytes时,luaEnv.Dostring()会报告lua有错,但我又不明白为什么会有错,然后我把lua文件后缀改成.txt了,再返回bytes给dostring就一切正常了。我怀疑是我不会用luaasset,网上搜了半天也没找到该怎么解决

HomlesFish avatar Aug 25 '21 12:08 HomlesFish

我主要是用luaasset.GetDecodeBytes()返回bytes时,luaEnv.Dostring()会报告lua有错,但我又不明白为什么会有错,然后我把lua文件后缀改成.txt了,再返回bytes给dostring就一切正常了。我怀疑是我不会用luaasset,网上搜了半天也没找到该怎么解决

luaasset.GetDecodeBytes()的返回值写错了,应该返回已经解码过的decode而不是data。

arctic252 avatar Nov 29 '21 08:11 arctic252