1.首先搭建lua的开发环境需要从github上下载lua的库,下载链接为 https://github.com/Tencent/xLua
下载之后的压缩包xLua-master解压,解压后的assets文件夹才是我们需要的最终文件
2.将assets里面的文件内容拷贝到unity项目的assets目录中去,当我们看到如下菜单界面的时候就说明我们的环境已经配置ok了
3.各类文件路径配置
环境配置上了我们配置专门管理lua脚本的文件夹LuaScripts以及C#脚本对应的文件夹Scripts,创建StreamingAssets保存本地的资源文件这个文件夹里面的资源会被打到包中去,创建editor文件夹用于编辑扩展代码 普通游戏代码不要放入这个文件夹里面。
4.unity Lua代码编写
在我们已经创建好的LuaScripts文件夹下面创建main.lua的lua文件代码如下
main = {} -- main是一个全局模块;
local function start()
print("game started")
end
main.start = start
return main
5.unity C#代码编写
c#的处理主要有两块 一块是初始化lua的环境 另一块是调用lua文件的代码
public class LuaLoader : MonoBehaviour
{
private LuaEnv luaEnv = null;
void Start()
{
luaEnv = new LuaEnv();
luaEnv.AddLoader(MyLuaLoader);
LoadScript("main");
SafeDoString("main.start()");//执行脚本
}
public static byte[] MyLuaLoader(ref string filePath)
{
string scriptPath = string.Empty;
filePath = filePath.Replace(".", "/") + ".lua";
scriptPath += Application.dataPath + "/LuaScripts/" + filePath;
return GameUtility.SafeReadAllBytes(scriptPath);//通过文件IO读取lua内容
}
public void LoadScript(string scriptName)
{
SafeDoString(string.Format("require('{0}')", scriptName));
}
public void SafeDoString(string scriptContent)
{ // 执行脚本, scriptContent脚本代码的文本内容;
if (this.luaEnv != null)
{
try
{
luaEnv.DoString(scriptContent); // 执行我们的脚本代码;
}
catch (System.Exception ex)
{
string msg = string.Format("xLua exception : {0}\n {1}", ex.Message, ex.StackTrace);
Debug.LogError(msg, null);
}
}
}
}
实现思路 创建luaEnv对象然后调用AddLoader添加lua的loader ,load脚本 然后调用脚本的方法。
简单的实现思路如下
下面用到的辅助类信息(简单的读取byte数据)
public static byte[] SafeReadAllBytes(string inFile)
{
try
{
if (string.IsNullOrEmpty(inFile))
{
return null;
}
if (!File.Exists(inFile))
{
return null;
}
File.SetAttributes(inFile, FileAttributes.Normal);
return File.ReadAllBytes(inFile);
}
catch (System.Exception ex)
{
Debug.LogError(string.Format("SafeReadAllBytes failed! path = {0} with err = {1}", inFile, ex.Message));
return null;
}
}