01.导入插件
​​​ https://github.com/Tencent/xLua​

02.C#调用lua
最基本是直接用LuaEnv.DoString执行一个字符串,当然,字符串得符合Lua语法

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua; //引入xlua
public class helllow : MonoBehaviour {
LuaEnv luaenv;
void Start () {
luaenv = new LuaEnv(); //创建 xlua虚拟机
luaenv.DoString("print('6666')");
}

private void OnDestroy() {
luaenv.Dispose();
}
}

Xlua04.使用C#调用lua脚本_c#


03.C#调用lua文件

创建LoadLuaThree.lua.txt,放入Resources文件夹

Resource加载的loader,需要注意的是因为Resource只支持有限的后缀,放Resources下的lua文件得加上txt后缀(见附带的例子)。

Xlua04.使用C#调用lua脚本_加载_02

Hero={name,hp,mp,attack}
function Hero:Attack1()
print("攻击方法1")
end
function Hero.Attack2()
print("攻击方法2")
end

function Hero:New()
H={};
MH={__index=self}
setmetatable(H,MH);
return H;
end

NewPerson=Hero:New();
NewPerson.name="好滴好滴";
NewPerson.Attack2();
NewPerson.Attack1();

创建C#脚本 LoadLua

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
public class LoadLua : MonoBehaviour {
LuaEnv luaEnv;
void Start () {
luaEnv=new LuaEnv();
TextAsset text=Resources.Load<TextAsset>("LoadLuaThree.lua");
luaEnv.DoString(text.text);
}


private void OnDestroy() {
luaEnv.Dispose();
}
}

Xlua04.使用C#调用lua脚本_lua_03


04.用lua的require函数

比如:DoString(“require ‘byfile’”)

完整代码见XLua\Tutorial\LoadLuaScript\ByFile目录

require实际上是调一个个的loader去加载,有一个成功就不再往下尝试,全失败则报文件找不到。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
public class LoadLua : MonoBehaviour {
LuaEnv luaEnv;
void Start () {
luaEnv=new LuaEnv();
luaEnv.DoString( "require'LoadLuaThree'");
}

private void OnDestroy() {
luaEnv.Dispose();
}
}



使用xLua的自定义Loader加载lua脚本
public delegate byte[] CustomLoader(ref string filepath);
public void LuaEnv.AddLoader(CustomLoader loader);
通过AddLoader可以注册个回调,该回调参数是字符串,lua代码里头调用require时,参数将会透传给回调,回调中就可以根据这个参数去加载指定文件,如果需要支持调试,需要把filepath修改为真实路径传出。该回调返回值是一个byte数组,如果为空表示该loader找不到,否则则为lua文件的内容。

Xlua04.使用C#调用lua脚本_加载_04

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using XLua;
public class Cunsterloader : MonoBehaviour {

private LuaEnv luaEnv;
void Start () {
Debug.Log(Application.streamingAssetsPath);
luaEnv=new LuaEnv();
luaEnv.AddLoader(CustomLoaders);
luaEnv.DoString( "require'LoadLuaThree.lua.txt'");
}

private byte[] CustomLoaders(ref string filepath){
string path=Application.streamingAssetsPath+"/"+filepath;
return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(path));
}
private void OnDestroy() {
luaEnv.Dispose();
}

}

Xlua04.使用C#调用lua脚本_加载_05