能讲讲LuaAsset/LuaImporter相关的用法吗
就是刚新搭建的项目,忽然发现Unity能识别.lua的文件了,而不是从前的教程中说的 需要改成.lua.txt。
一路发现了 这次今年的提交 #c2cbaf8d 。
新增有 LuaImporter,LuaAsset ,XXTEA 这些文件。似乎是关于导入和加密的
不过我并没有查到怎么使用。简单的require似乎找不到文件。
实际上我觉得只保留这样的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。 加密我觉得确实没啥用,打算删了。
我能理解这种做法。不过仍然有疑问。
- 比如立即编译lua源码成unity资源,确实不错,但是默认情况缺少luac.exe。又不是人人都配了build环境去编译。我看了一下批处理读的是VS2015和2017的库,我装的是VS2019啊。不想配编译。又不知道哪里去搞exe
- 密码直接写在了LuaAsset文件里面,如果我想保持xlua目录干净,以备和最新官方源码一致。则必须要改这个文件就不行了。
- LuaAsset这个Require方法走的还是Resourses。所以还是得去自己实现Require方法。显得LuaAsset没有意义
实际上我觉得只保留这样的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过来吧?
这涉及要删代码,不敢提。😂
我又去看了看源码。2018以下 new TextAsset()不支持带参数。而text字段只有get,走底层了。应该兼容不了。除非有另外能找到new出来的办法。还是得留一个LuaAsset
我主要是用luaasset.GetDecodeBytes()返回bytes时,luaEnv.Dostring()会报告lua有错,但我又不明白为什么会有错,然后我把lua文件后缀改成.txt了,再返回bytes给dostring就一切正常了。我怀疑是我不会用luaasset,网上搜了半天也没找到该怎么解决
我主要是用luaasset.GetDecodeBytes()返回bytes时,luaEnv.Dostring()会报告lua有错,但我又不明白为什么会有错,然后我把lua文件后缀改成.txt了,再返回bytes给dostring就一切正常了。我怀疑是我不会用luaasset,网上搜了半天也没找到该怎么解决
luaasset.GetDecodeBytes()的返回值写错了,应该返回已经解码过的decode而不是data。