XLua导入和物体挂载Lua组件

XLua导入

  1. 官方下载链接:添加链接描述
    下载源码解压即可:
    在这里插入图片描述
    打开Assets文件夹,将其中的Plugins和XLua拖进Unity的Assets中
  2. 将Tools也拖进Unity中,导入完成后console会报错,显示有dll文件重复,删除一部分文件,剩余如图
    在这里插入图片描述
  3. 之后在Project Setting->Player->Script Compilation中添加宏:HOTFIX_ENABLE
    在这里插入图片描述
  4. 准备工作完成,简单测试lua功能,创建一个C#脚本,命名为Test
    其中我们需要引入XLua的命名空间,并使用LuaEnv,代码如下:
public class Test : MonoBehaviour
{
	public LuaEnv luaEnv;
    void Start()
    {
    	luaEnv=new LuaEnv();//创建对象
    	//执行lua脚本需要DoString()
    	luaEnv.DoString("print('hello xlua')");
    	//如果需要执行指定lua文件,则需要require+'lua文件名'
    	//luaEnv.DoString("require'fileName'")
    	lua.Dispose();//释放
    }
}
  1. 在Unity中创建一个游戏物体并挂载Test脚本,在Unity窗口上方按顺序点击,生成并注入
    Generate Code
    Hotfix Inject In Editor
    在这里插入图片描述
  2. 点击运行,可以看到console打印了这句话,说明函数的使用已经成功了,接下来就是更好的做一些工具
    在这里插入图片描述

Lua脚本挂载

  • 说明:
    • 我并不想通过路径来加载,而是想通过拖拽的方式,使物体挂载组件一样挂载lua脚本,我找了很长时间的方案,目前有一个方案可以勉强完成这个目标
    • 方案:
      1. 使用继承自mono的类挂载到物体上
      2. 这个类包含了要执行的lua文件(感觉有点本末倒置的感觉)
  1. 第一步,将lua文件转换为Unity可支持的文件TextAssets
    需要在Unity内部创建一个类:
[ScriptedImporter(1, ".lua")]
public class LuaImporter : ScriptedImporter
{
    public override void OnImportAsset(AssetImportContext ctx)
    {
        var luaTxt = File.ReadAllText(ctx.assetPath);
        var assetText = new TextAsset(luaTxt);
        ctx.AddObjectToAsset("main obj", assetText);
        ctx.SetMainObject(assetText);
    }
}

这个类用于将.lua文件转换为Unity可使用的TextAssets资源文件

  1. 第二步,目前Unity是不支持直接创建lua文件的,所以还需要实现创建lua文件的功能
    在这里插入图片描述
    这个方法可以参考在Unity中使用Lua脚本模板创建新的Lua文件
    以上实现之后,创建一个lua脚本test.lua,在这个lua文件中我们可以做创建物体并命名的简单尝试
print('hello')
go=CS.UnityEngine.GameObject('wo');
  1. 实现一个类,类包含TextAssets
public class LuaContainer: MonoBehaviour
{
	//lua文件
    public TextAsset luaFile;
    //lua环境
    LuaEnv luaEnv;
}

创建一个游戏物体并挂载LuaContainer

  • 接下来就是如何执行当前物体所挂载的lua脚本
  • 第一种是通过DoString(字符串)进行执行lua脚本,那么先在窗口中获取到刚才编写的lua文件
    在这里插入图片描述
  • 获取其中的text内容并执行
    void Start()
    {
        luaEnv= new LuaEnv();
        if (luaFile!=null)
        {
            Debug.Log("加载不为空");
            luaEnv.DoString(luaFile.text);
        }
     }

点击运行游戏:
在这里插入图片描述
结果看是成功的

补充

  1. 当前方式并不是很友好的方式,每创建一个挂载lua文件的游戏物体就会创建一个LuaEnv进行new和Dispose
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值