Unity热更新_Unity调用Lua脚本

使用的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()

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值