tolua调试 unity3d_tolua unity3d - CSDN
  • Unity——Tolua框架笔记

    2020-06-19 18:35:34
    1、首先下载Unity安装包,然后安装即可,如果开发手游的话需要安装Android和IOS的support包。 2、下载LuaFramework_UGUI 3、解压项目LuaFramework_UGUI,用Unity打开,选择LuaFramework-->Build xxx ...

    一、准备阶段

    1、下载LuaFramework_UGUILuaFramework_UGUI_V2

    2、解压项目LuaFramework_UGUI,用Unity打开,操作完成下图然后选择LuaFramework-->Build xxx Resource,运行即可

    二、框架说明

    以上为项目结构图。

    1、Editor:主要有两个文件。CustomSettings主要是将C#的Class和Action等委托注册,生成Wrap文件,供Lua调用,实现Lua和C#的交互;Packager主要用来生成Assetbundle包,需要在其中添加好打包文件名、文件格式、文件路径等配置。

    2、Examples:框架实例,存放实例的预设和资源,Packager中设置的打包路径就在这里。

    3、Lua:3rd是一些第三方库和例子;Common是一些全局属性、方法的定义;Controller是预设Panel的逻辑代码;Logic是全局的管理文件;View是预设Panel的UI组件和定义和获取,供Controller的使用。Lua文件夹下也有一些文件,Lua入口文件Main.lua和event广播相关文件(不过这个不推荐用,不好维护吧)

    4、Resources:存防音视频等资源

    5、Scenes:场景(根据这个框架,一个项目有一个场景就可以了,之后不同的页面仅是更换预设Panel就可以了)

    6、Scripts:C#代码,主要实现AB包的加载和下载、资源的加载等

    7、ToLua:蒙哥写的ToLua热更新框架代码,用于C#和Lua交互

    8、Plugins:插件,一般存放第三方库,比如安卓和IOS的库,微信登陆、定位等第三方库。

    9、StreamingAssets:Build xxx Resource生成的AB都在这里,这里的文件就是我们可以热更新的文件。只要将这部分文件放置到服务器让客户端下载更新即可。

    三、通过以上各文件夹的说明,我们了解了框架的组成。现在大致说下框架的执行过程:

    1、首先运行项目,显示的是Scene的内容,这部分是固定的,不能热更,主要显示项目名称或公司名称吧

    2、运行Scene时,同时会执行挂载在Scene上的脚本

    3、脚本执行开始会先将AB包复制到项目目录下,然后从服务器下载files.txt(AB包目录,含有AB包名字及其MD5)

    4、根据MD5判断该AB包是否需要更新,是则从服务器下载AB包替换到项目目录下,这就是热更新。

    5、当复制完最新的AB包后,开始创建Lua虚拟机,打开Lua入口Main.lua,然后执行Game.lua进入应用开始界面

    6、进入应用开始界面(如登陆或大厅),这时主要就是预设Panel的更换,主要执行Lua代码(当然会跟C#交互)

    7、预设Panel的创建是在Controller的xxxCtrl.lua中调用的,预设的命名和lua文件的命名是有固定格式的,参考PanelMannager,都是以xxxPanel结束的,然后在Lua/View下创建对应的xxxPanel.lua和在Lua/Controller下创建对应的xxxCtrl.lua。通过学习Lua编程我们知道,要在一个lua文件中使用另一个lua文件是需要先require的,框架在这方面进行统一的require,当然你也可以分开,有时候分开相对来说更好,这个主要根据自己的情况决定,框架统一在define.lua和CtrlManager.lua中引用,define.lua主要是所列xxxPanel.lua和xxxCtrl.lua的key,然后在Game.lua中统一引用xxxPanel.lua,这是使用须知的。

    8、在Lua中使用C#或者Unity的类是需要完整引用的(namespace+className)、AddComponent(typeof(namespace+className))动态挂载脚本需要注意下,当然如果是Unity的组件可以这样写:AddComponent("Button"),这些写法都需要先将这些类在CustomSettings中注册并Build出Wrap文件才能用。

    四、StreamingAssets服务器配置

    参考我之前写的文章。

    通过以上的配置可以将本机当作服务器实现热更功能,要使用热更功能需要在Scripts/ConstDefine/AppConst中修改其中的配置。

    1、UpdateMode:true表示启动热更模式,需要配置WebUrl(AB包的服务器地址)

    2、LuaBundleMode:true表示将资源和lua代码打包成AB包,false主要用于调试,避免每次修改lua代码都要打包

    3、WebUrl:AB包的服务器地址

    4、每次修改C#代码都需要重新编译Wrap文件

    5、本人修改后的框架,只保留主要的部分,其他的删了。

     五、注意

    遇到一个问题:打开a界面,关闭a界面,再打开a界面,这时可能会出现图片丢失显示不出来的情况,主要是框架在关闭界面时会进行资源释放,所以大神们一般会自己写一套资源管理,但我们这些小角色只要把这个资源释放代码注释掉就可以了。当然这个只是蠢办法,能力不够只能这样子了。

    六、分包加载

    首先我们需要对各类资源进行分类,需要统一下载的分为一类,以此类别作为分包加载的标志。

    展开全文
  • 启动x-studio365最新版本10.0.3300.160(点击下载), 支持Unity ulua/tolua slua(32/64位) Lua调试 【文件】【打开文件夹(Unity或Cocos2d-x Lua】 弹出的文件夹选择对话框选择Unity工程根目录即可 打开后界面...

    #UnityLua_DebugTutorial
    请查看最新官方文档: https://docs.x-studio.net/zh_CN/latest/lua-dbg/01_unity3d.html

    展开全文
  • tolua默认支持ZeroBraneSudio(以下简称zbs)的本地调试,但不能进行远程调试。其实远程调试也很简单,只需要将zbs的mobdebug.lua脚本拷贝到你的工程Lua目录下,在需要调试的地方,执行代码require("mobdebug")....

    《u3d tolua + ZeroBraneStudio远程调试》
    作者:游蓝海
    文章地址:http://blog.csdn.net/you_lan_hai/article/details/55057720
    转载请注明出处

    tolua默认支持ZeroBraneSudio(以下简称zbs)的本地调试,但不能进行远程调试。

    其实远程调试也很简单,只需要将zbs的mobdebug.lua脚本拷贝到你的工程Lua目录下,在需要调试的地方,执行代码require("mobdebug").start(ip, port)即可连接到zbs进行调试。

    但是,还需要一些配置,才能完美的进行下去。

    拷贝mobdebug脚本

    将脚本mobdebug.lua拷贝到你的工程Lua目录下。这个脚本位于zbs的安装目录下,如:mac系统路径 /Applications/ZeroBraneStudio.app/Contents/ZeroBraneStudio/lualibs/mobdebug/mobdebug.lua

    为了能支持tolua,显示出函数堆栈,还需要修改几行代码,大概在178行附近,修改后如下:

     if type(mt) == 'table' and (rawget(mt, "__serialize") or rawget(mt, "__tostring")) then -- knows how to serialize itself
          seen[t] = insref or spath
          if rawget(mt, "__serialize") then t = mt.__serialize(t) else t = tostring(t) end
          ttype = type(t) end -- new value falls through to be serialized

    因为tolua对“类”做了限制,如果访问一个不存在的属性时,会抛出异常。zbs需要知道__serialize__tostring属性是否存在,直接调用mt.__serialize会触发异常,导致堆栈解析失败。因此,这里统一使用rawget函数去判断属性是否存在。

    修改ToLua.cs

    由于tolua加载lua脚本的时候,未记录文件后缀名,导致zbs无法定位原始文件。(其实这一步,修改mobdebug.lua也可以,只是我没有找到地方,所以要修改c#,注:应该是修改过debugger_loop)。在ToLua.csstatic int Loader(IntPtr L)函数中,追加上文件后缀名。

    if(!fileName.EndsWith(".lua"))
    {
        fileName += ".lua"; // 加上后缀名
    }
    if (LuaDLL.luaL_loadbuffer(L, buffer, buffer.Length, fileName) != 0)
    {...}

    防止zbs异常结束unity

    在unity编辑器模式下开启调试,当点击结束调试的时候,zbs会调用lua的os.exit函数,这个函数位于c语言中,掉用了系统函数,直接结束了unity的整个进程,而不是结束当前“程序”的运行,这个体验有点糟糕。

    所幸,我们可以覆盖os.exit,这也是脚本语言的优势,任何属性都可以动态的改掉。只需要在lua脚本开始执行的时候,加上下面的代码:

    os.exit = function()
        UnityEngine.Application.Quit()
    end

    注意事项

    我们使用了嵌入mobdebug的模式,所以就可以关闭掉tolua默认的调试模式,在LuaConst.cs中,关闭默认的调试模式:

    public static bool openLuaSocket = true; // socket库必须要打开
    public static bool openZbsDebugger = false; 

    调试步骤

    1. 启动zbs,在左侧的project视图中,右键点击根目录,在弹出的右键菜单中,选择choose,选择你要调试的Lua代码目录。
    2. 然后在zbs中,打开目录中的任意一个lua代码文件,让zbs去匹配路径。
    3. 启动远程调试服务器:点击菜单Project,勾选Start Debugger Server
    4. 在你的代码需要调试的时候,加入启动代码require("mobdebug").start(ip, port),port可以缺省,使用zbs默认的端口。建议这一步,在你的程序中做一个调试界面,仅在需要调试的时候,打开这个界面,输入ip,点击确定的时候,去执行启动代码。
    展开全文
  • 1/安装vscode 2/下载luaDebug luaDbugjit—放在lua.../ ====================== Lua 调试支持 ====================== /// <summary> /// 初始化加载第三方库 /// </summary> void OpenLibs(...

    1/安装vscode

    2/下载luaDebug luaDbugjit—放在lua文件夹下

    3/安装插件luaide(免费断点0.3.7)

    4/添加配置文件

    5/打开luaManager 

    / ====================== Lua 调试支持 ======================

          /// <summary>
            /// 初始化加载第三方库
            /// </summary>
            void OpenLibs() {
                lua.OpenLibs(LuaDLL.luaopen_pb);      
                lua.OpenLibs(LuaDLL.luaopen_sproto_core);
                lua.OpenLibs(LuaDLL.luaopen_protobuf_c);
                lua.OpenLibs(LuaDLL.luaopen_lpeg);
                lua.OpenLibs(LuaDLL.luaopen_bit);
                lua.OpenLibs(LuaDLL.luaopen_socket_core);
    #if UNITY_EDITOR
                OpenLuaSocket();
    #endif
                this.OpenCJson();
            }

            protected void OpenLuaSocket()
            {
                LuaConst.openLuaSocket = true;

                lua.BeginPreLoad();
                lua.RegFunction("socket.core", LuaOpen_Socket_Core);
                lua.RegFunction("mime.core", LuaOpen_Mime_Core);
                lua.EndPreLoad();
            }
            [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
            static int LuaOpen_Socket_Core(System.IntPtr L)
            {
                return LuaDLL.luaopen_socket_core(L);
            }
            [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
            static int LuaOpen_Mime_Core(System.IntPtr L)
            {
                return LuaDLL.luaopen_mime_core(L);
            }
            // ====================== Lua 调试支持 ======================

    6/Main.lua 中添加

    --主入口函数。从这里开始lua逻辑
    function Main()                    
        local breakSocketHandle,debugXpCall = require("LuaDebugjit")("localhost", 7003)             
    end

     

    即可完成调试功能—————————— 

     

    展开全文
  • 转自:https://www.jianshu.com/p/ccb491ed4260KSFramework是一个Unity 5 Asset Bundle开发框架和工具集,专注于运行时热重载,使用了SLua作为脚本引擎。https://github.com/mr-kelly/KSFrameworkKSFramework是一个...
  • 什么是热更新 热:就是刚出炉 简单来说就是当游戏某个功能出现bug,或者修改了某个功能,或者...目前比较受欢迎的热更新方案:uLua tolua xLua 热更新方案 这些热更新方案都是基于Lua语言的,也可以叫做lua插件(...
  • 以下为面试Unity3D开发工程师时总结的10个问题 1.在上一家公司负责的工作 业务开发 平台接入 经分接入 2.开发过哪些模块 好友系统 邀请系统 托管系统 留言系统 礼包兑换 登录奖励活动 积分活动 充值活动 3.做过...
  • (2015-02-10 22:48:47) ...unity3d 热更新 分类:unity3d 前言IOS不能热更新,不是因为不能用反射,是因为System.Reflection.Assembly.Load 无法使用System.Reflection.Emit...
  • 基础部分: 解决的问题 更新频繁,而IOS审核长 ...首先要清楚Unity的打包原理,也就是AssetBundle的打包机制,他会把prefab打包成.asset格式作为传输的数据。 通过校验文件的MD5值来判断是否需要更新,如果需要更...
  • Unity3D引擎是一款这几年特别火爆3D游戏引擎,大家都知道Unity3D引擎是跨平台的。所谓跨平台就是说开发者只需要写一套逻辑代码,即可发布到各个平台,如Android,PC,iOS等。那为何Unity3D能够做到跨平台呢?之前...
  • TimerManager.lua --[[ -- 定时器管理:负责定时器获取、回收、...-- 2、带有"Co"的接口都是用于协程,它的调度会比普通更新后一步---次序依从Unity函数调用次序:https://docs.unity3d.com/Manual/ExecutionOrder...
  • 转自:... 一、tolua# c#调用lua:LuaState[变量名/函数名] 1.LuaState a.执行lua代码段 DoString(string) DoFile(.lua文件名) Require(.lua文件名(但没有.lua后缀)) b.获取
  • 阅前提示 该篇文章为步骤教学型文章。作者阅读了网络中散布的关于lua断点的文章,苦于它们要...Vscode + Unity + ulua/tolua/slua … Vscode 1.安装插件:Luaide-lite 这里说句题外话,这个插件强烈推荐,非常适合v...
  • 我们可以通过断点调试查看堆栈信息,也可以直接输出调用的堆栈信息,using System.Collections; using System.Collections.Generic; using UnityEngine;public class DebugStack : MonoBehaviour { // Use this for...
  • 写在前面 xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能、易用性、扩展性而广受好评。现在,腾讯已经将xLua开源到GitHub。 2016年12月末,xLua刚刚实现新的...
  • 最近使用ToLua框架使用Unity中的Dropdown组件,其他属性都还好和在C#中使用的形式差不多,只是修改成了Lua的语法习惯就可以了,但是我有个需求,是要需要实现动态添加Dropdown中的Options,这个就很做起来废了半天劲...
  • ToLua LuaFramework 使用实战[1]-代码热更新 感谢原文作者@罗培羽,本文会根据最新框架版本做一些修改。 一、代码热更新 1.1、安装框架 只要在http://www.ulua.org/index.html下载LuaFramework,然后用Unity3D打开...
  • 前言 接我之前的文章,讲到使用IntelliJ IDEA(做为Lua的编辑器)+EmmlyLua...PS:同样的配置16G DDR4+128G SSD,在WIN10和WIN7上表现差异很大,WIN10调试很流畅,WIN7调试特别卡且容易让Unity挂掉,所以对于硬件高...
  • 写在前面\\xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能、易用性、扩展性而广受好评。现在,腾讯已经将xLua开源到GitHub。\\2016年12月末,xLua刚刚实现新的...
1 2 3 4 5 ... 7
收藏数 125
精华内容 50
关键字:

tolua调试 unity3d