找回密码
 立即注册
查看: 223|回复: 0

XLua导入和物体挂载Lua组件

[复制链接]
发表于 2023-4-9 09:55 | 显示全部楼层 |阅读模式
XLua导入

    官方下载链接:添加链接描述
    下载源码解压即可:


    打开Assets文件夹,将其中的Plugins和XLua拖进Unity的Assets中将Tools也拖进Unity中,导入完成后console会报错,显示有dll文件重复,删除一部分文件,剩余如图


    之后在Project Setting->Player->Script Compilation中添加宏:HOTFIX_ENABLE


    准备工作完成,简单测试lua功能,创建一个C#脚本,命名为Test
    其中我们需要引入XLua的命名空间,并使用LuaEnv,代码如下:
  1. publicclassTest:MonoBehaviour{publicLuaEnv luaEnv;voidStart(){
  2.             luaEnv=newLuaEnv();//创建对象//执行lua脚本需要DoString()
  3.             luaEnv.DoString("print('hello xlua')");//如果需要执行指定lua文件,则需要require+'lua文件名'//luaEnv.DoString("require'fileName'")
  4.             lua.Dispose();//释放}}
复制代码
    在Unity中创建一个游戏物体并挂载Test脚本,在Unity窗口上方按顺序点击,生成并注入
    Generate Code
    Hotfix Inject In Editor


    点击运行,可以看到console打印了这句话,说明函数的使用已经成功了,接下来就是更好的做一些工具


Lua脚本挂载


  • 说明:
      我并不想通过路径来加载,而是想通过拖拽的方式,使物体挂载组件一样挂载lua脚本,我找了很长时间的方案,目前有一个方案可以勉强完成这个目标
    • 方案:
        使用继承自mono的类挂载到物体上这个类包含了要执行的lua文件(感觉有点本末倒置的感觉)


    第一步,将lua文件转换为Unity可支持的文件TextAssets
    需要在Unity内部创建一个类:
  1. [ScriptedImporter(1,".lua")]publicclassLuaImporter:ScriptedImporter{publicoverridevoidOnImportAsset(AssetImportContext ctx){var luaTxt = File.ReadAllText(ctx.assetPath);var assetText =newTextAsset(luaTxt);
  2.         ctx.AddObjectToAsset("main obj", assetText);
  3.         ctx.SetMainObject(assetText);}}
复制代码
这个类用于将.lua文件转换为Unity可使用的TextAssets资源文件
    第二步,目前Unity是不支持直接创建lua文件的,所以还需要实现创建lua文件的功能


    这个方法可以参考在Unity中使用Lua脚本模板创建新的Lua文件
    以上实现之后,创建一个lua脚本test.lua,在这个lua文件中我们可以做创建物体并命名的简单尝试
  1. print('hello')
  2. go=CS.UnityEngine.GameObject('wo');
复制代码
    实现一个类,类包含TextAssets
  1. publicclassLuaContainer:MonoBehaviour{//lua文件publicTextAsset luaFile;//lua环境LuaEnv luaEnv;}
复制代码
创建一个游戏物体并挂载LuaContainer
    接下来就是如何执行当前物体所挂载的lua脚本第一种是通过DoString(字符串)进行执行lua脚本,那么先在窗口中获取到刚才编写的lua文件


    获取其中的text内容并执行
  1. voidStart(){
  2.         luaEnv=newLuaEnv();if(luaFile!=null){
  3.             Debug.Log("加载不为空");
  4.             luaEnv.DoString(luaFile.text);}}
复制代码
点击运行游戏:


结果看是成功的
补充

    当前方式并不是很友好的方式,每创建一个挂载lua文件的游戏物体就会创建一个LuaEnv进行new和Dispose

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-18 01:05 , Processed in 0.087987 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表