Xlua学习记录

下载Xlua

在github上下载xlua之后,将 xlua-master/Assets下的内容拷贝到我们的工程里,如图所示:

执行字符串:

执行时直接使用luaEnv.DoString方法来执行lua的操作

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
public class XluaTest : MonoBehaviour {
    LuaEnv luaEnv;
    void Start () {
        luaEnv = new LuaEnv();
        luaEnv.DoString("print('运行xlua')");
        luaEnv.Dispose();
       }
  
}

运行后显示以下内容:

执行加载Lua文件

在Resources文件夹下创建一个文本文档命名为luaTest,后缀名以.lua.txt结束。打开文档编写简单lua代码:

回到代码中,直接使用下面的方式加载Resources文件下的lua文档,luaEnv.Dostring方法会直接进行编译:

TextAsset t = Resources.Load<TextAsset>("luaTest.lua")
luaEnc.DoString(t.text)

运行后如下图所示:

或者不使用上面的这个方式可以直接使用lua里的方法来加载lua文件:

luaEnv.DoString("require 'luaTest'");

自定义loder

官方文档介绍loder的用法,下面演示一下自定义loder,方便之处在于可以自定义执行lua时想要的一些操作:
新建一个文件夹StreamingAssets,再新建一个lua文件lua007.lua.txt编辑内容为print(“I am 007”)
在脚本中更改以下代码:

using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using XLua;
public class CreatLoder : MonoBehaviour {
    void Start () 
    {
        LuaEnv luaEnv = new LuaEnv();
        luaEnv.AddLoader(Myloder);
        luaEnv.DoString("require'test007'");
        luaEnv.Dispose();
    }
       
    public byte[]Myloder(ref string feilPath)
    {
        string absPayh = Application.streamingAssetsPath + "/" + feilPath+".lua.txt";
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(absPayh));
    }
}

运行后:

通过C#访问lua中的全局变量

在新场景中新建一个Resources文件夹,新建一个lua文件,编辑为:
a=100
name=”Andy”
IsRoot=false
打开脚本进行编辑

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
public class CSharpCalllua : MonoBehaviour {
       void Start () {
        LuaEnv luaEnv = new LuaEnv();
        luaEnv.DoString("require'CSharpCalllua'");//先打开lua文件,再获取lua中的全局变量
        int a = luaEnv.Global.Get<int>("a");s
        string name = luaEnv.Global.Get<string>("name");
        bool isroot = luaEnv.Global.Get<bool>("IsRoot");
        Debug.Log(a);
        Debug.Log(name);
        Debug.Log(isroot);
    }
       
       void Update () {
              
       }
}

点击运行后显示: