使用的lua插件是:XLua
1.与 lua通信首先要先把所有的lua脚本初始化加载进来
2.执行 lua的启动脚本GameInit.lua,在这个启动脚本里会执行相关的lua调用GameInit.Init(),例如:初始化
3.在lua脚本GameInit的启动函数里加载UI窗口
加载,执行lua的LuaManager脚本,如下:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using XLua;
/// <summary>
/// 这个脚本作为与lua通信的桥梁,在这里加载lua脚本,挂载在一个空的游戏物体上面
/// </summary>
public class LuaManager : MonoBehaviour
{
/// <summary>
/// 全局的xLua引擎
/// </summary>
public static LuaEnv luaEnv;
public static LuaManager Instance;
void Awake()
{
Instance = this;
luaEnv = new LuaEnv();
//这里相当于初始化路径 也就是 Application.dataPath 文件夹下 .lua的文件都会被初始化加载
luaEnv.DoString(string.Format("package.path = '{0}/?.lua'", Application.dataPath));
// luaEnv.DoString(string.Format("package.path = '{0}/?.lua'", Application.dataPath+"/../Xlua"));
DontDestroyOnLoad(gameObject);
}
private void Start()
{
//GameInit是lua的启动脚本,这句话会执行GameInit模块脚本
LuaManager.Instance.DoString("require'XLuaLogic/GameInit'");
}
/// <summary>
/// 执行lua脚本
/// </summary>
/// <param name="str"></param>
public void DoString(string str)
{
luaEnv.DoString(str);
}
// Update is called once per frame
void Update()
{
//luaEnv.GC(); //时刻回收
}
void OnDestroy()
{
//luaEnv.Dispose(); //释放
}
}
Lua启动类GameInit如下:
print('启动GameInit.lua')
require "XLuaLogic/CtrlManager"
GameInit = {};
local this = GameInit;
function GameInit.Init()
--这里是加载某一个Ui窗口,OnCreate是加载完成后的回调
CS.LuaHelper.ViewUtil:LoadUIRoot(this.OnCreate);
end
--启动事件--
function GameInit.OnCreate()
--gameObject = obj;
print("进入了回调 GameInit");
end
GameInit.Init()