![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Lua学习
随风吹笛
这个作者很懒,什么都没留下…
展开
-
项目后期Lua接入笔记03--LuaBehaviour设计
Unity是组件式开发,脚本继承自monobehaviour,然后挂在在gameobject上来驱动游戏,沿着这条思路,我们设计一个自己的behaviour来驱动lua脚本。using UnityEngine;using LuaInterface;public class LuaMono : MonoBehaviour{ public string ModualName; publ原创 2017-03-27 20:37:44 · 2405 阅读 · 1 评论 -
XLua框架搭建——lua oop类设计
面向对象编程是目前比较主流的做法,在lua中并没有类的概念,只有table,通过table的特性,我们可以自己构造一个类。关于这方面的资料比较多,就不在说明,不清楚的可以直接百度,这里提供一个云风大神的连接 在 Lua 中实现面向对象下面提供一个类的实现,仅供参考,不知道哪里来的了function class(classname, super) local superTy...原创 2018-04-17 20:13:12 · 2284 阅读 · 1 评论 -
XLua框架搭建——lua 消息分发
消息分发对于模块解耦是一个很好的方案,前面的博客中介绍过如何在c#中写一个消息分发,以及消息分发的原理,有需要的可以去看原来的文章游戏脚本事件分发,同时在前面的lua后期接入笔记里也说过利用c#的消息分发来实现lua端的消息分发,见文章项目后期Lua接入笔记06–按钮事件监听及消息分发,但这是后期的时候,lua的使用不多,性能上的考虑也比较少,问题不是很大,现在搭建框架,需要大量使用lua,那么l...原创 2018-04-17 20:45:11 · 2436 阅读 · 2 评论 -
XLua框架搭建——Unity的Update循环
unity的生命周期中有一个Update函数,是游戏的循环,类似的还有FixedUpdate和LateUpdate等,在c#中继承monobehaviour后unity就会调用对应的函数,根据我们前面的设计《XLua框架搭建——LuaBehaviour设计》,我们也可以获取对应的update函数,然后进行调用,但是在lua中是mgr类的非生命周期下的类呢?无论是c#还是lua都会有这个问题,对...原创 2018-04-18 20:37:16 · 4515 阅读 · 0 评论 -
XLua框架搭建——LuaBehaviour设计
由于Unity的生命周期问题,一般来说在Lua端都要实现相同的生命周期调用,以便和unity进行衔接。在官方第二个示例中,有个LuaBehaviour的脚本,演示了如何在lua中实现unity的生命周期,原理就是获取相关函数,然后在c#中被调用时调用对应的lua函数即可。一开始使用c#代码创建一个LuaTable,并设置__index指向全局。 LuaTable meta = lu...原创 2018-04-13 18:59:16 · 5883 阅读 · 1 评论 -
XLua框架搭建——Lua定时器的实现
前面介绍了lua中update的实现,利用update,我们可以实现lua的定时器类。 与c#定时器原理一样,我们需要提供注册函数与反注册函数,然后利用update注册对应的update循环,在update循环里获取当前事件,然后遍历当前的注册列表,比较当前时间和定时器的注册时间,如果到了指定时间,就进行函数调用,同样,函数注册时需要传递自身self。 注册函数类似如下function...原创 2018-04-23 20:00:39 · 3998 阅读 · 0 评论 -
XLua框架搭建——lua协程实现
协程在unity中是一个很常用的方法,我们可以利用协程使代码看起来更连贯,易于理解。xlua在示例6中提供了一个协程的示例。local util = require 'xlua.util'local gameobject = CS.UnityEngine.GameObject('Coroutine_Runner')CS.UnityEngine.Object.DontDestroyOn...原创 2018-05-02 20:43:59 · 4067 阅读 · 0 评论 -
XLua框架搭建——print支持文件名和行号及日志双击重定向
xlua的代码里在使用的日志打印的时候会用print来进行,但是print仅仅是打印输入的数据,而没有对应的文件名信息和行号,如果文件比较多,日志也比较多的话,就会觉得很麻烦。lua提供了调试类debug,可以获取堆栈等信息,我们可以利用这个类来进行文件名和行号的获取,然后将文件名和行号一起传过去进行打印。设定一定的规范,然后利用前面的文章所讲的日志重定向,在控制台双击日志的时候进行自动打开文...原创 2018-04-25 20:28:30 · 2740 阅读 · 0 评论 -
XLua框架搭建——XLua API与try to dispose a LuaEnv with C# callback
在lua的设计中,有些是c语言与lua相互调用的方法,作为使用c#的unity,xlua也是用c#来进行编写,所以我们现在要使用c#代码来做这些事,xlua提供了相对应的方法,这些方法在LuaAPI类里。LuaAPI.lua_gettop();LuaAPI.xlua_getglobal();LuaAPI.xlua_pgettable();LuaAPI.lua_pushvalue();...原创 2018-05-10 20:05:55 · 5858 阅读 · 0 评论 -
XLua框架搭建——lua端改造c#现有类
在Lua端使用unity的一些类时会有一些比较大的性能消耗,比如我们常用的位置赋值操作transform.position = CS.UnityEngine.Vector3(0,1,0);如果进行性能测试会发现在性能消耗上需要十多毫秒,关于如何进行性能测试,可以参考官方文档《XLua性能分析工具》,后面也会有相关的文章。对于这个性能消耗,一个这么简单的操作,而且类似这样的赋值语句是一个...原创 2018-05-07 20:00:29 · 5387 阅读 · 2 评论 -
XLua框架搭建——lua性能分析
xlua代码里提供了一个性能分析的文档,里面提供了两个工具,一个是《函数调用时长分析工具》,一个是《内存泄漏定位工具》。关于这两个工具建议自己扩展,尤其是内存工具这块,扩展后可以做两个快照的比对,快速定位到哪个函数出现了问题。首先说下第一个工具,第一个工具用来分析时长,官方说明如下 api很简单,就三个,start和stop都是无参数,也很好理解,分别是统计开始以及结束。在star...原创 2018-05-21 20:32:34 · 4305 阅读 · 0 评论 -
XLua框架搭建——LuaFunction分部类扩展
Lua中函数在c#中的映射是LuaFunction,对函数的调用一般是用call来调用,但是官方认为这个效率上存在一定的GC,所以提供了Action和Func,其中Action是调用,没有返回值,而Func是有返回值的。在实际使用时发现少了一个函数,就是我调用的是无参函数,但是希望能拿到返回值,官方的代码里并没有相关函数,但是阅读代码可以发现,这是一个分部类,官方也鼓励我们自己扩建相关函数,看...原创 2018-05-15 20:32:52 · 2917 阅读 · 0 评论 -
XLua框架搭建——玩转xLua的热补丁
关于热补丁这块,转载一篇xlua作者的文章,文章原链接玩转xLua的热补丁 xlua框架这块算是告一段落,如果有这方面的交流可以加QQ群:517539056xLua热补丁特性上线一年多,已经得到广泛的应用,其中不乏一些千万级DAU、亿级用户量的大游戏,反馈良好。然而同时也有些初接触的童鞋会有不少误区,这篇主要谈谈这些误区。误区规避了,自然容易玩转。误区1:我哪里预测得到哪些地方有bug,...转载 2018-06-04 20:11:27 · 2544 阅读 · 3 评论 -
XLua框架搭建——类型导出与黑名单
经过前面的配置,应该可以正常跑Lua代码了,但是要想在lua中调用C#的代码,一般要生成相应的wrap文件,xlua通过打标签的方式来进行实现。官方建议不要在类里面打标签,而是统一到一个文件里,提供了示例代码ExampleGenConfig.cs,统一写在一个文件里,如果要配置同一个命名空间下的所有类进行导出,比如UGUI类,可以通过如下代码直接遍历取得[LuaCallCSharp]...原创 2018-04-11 20:08:30 · 7736 阅读 · 0 评论 -
XLua框架搭建——lua文件加载,签名及加密
XLua教程里面的第一步就是教大家如何去加载一个lua文件,官方推荐的做法是整个程序就一个DoString(“require ‘main’”),然后在main.lua加载其它脚本(类似lua脚本的命令行执行:lua main.lua)。对于实际项目,一般都是使用assetBundle来作为lua文件的载体,这个方式使用的是自定义Loader方式,利用自定义Loader,可以实现代码签名以及加密...原创 2018-04-08 19:57:54 · 5319 阅读 · 2 评论 -
XLua框架搭建——编辑器选择
xlua开源代码地址:https://github.com/Tencent/xLua新项目准备使用xlua来进行游戏开发,我进行这方面的技术研究及框架搭建。项目选择这套主要是因为对c#的热修复功能,xlua作为一套lua框架,其他lua框架能实现的功能理论上xlua都是能实现的。对于我们项目来说,规划是lua用来编写UI相关的业务逻辑,核心战斗这块还是使用c#来编写,如果到时候出了bug,也可...原创 2018-03-29 19:28:11 · 6526 阅读 · 0 评论 -
项目后期Lua接入笔记04--宏定义处理HelloWorld
Lua和我们Unity游戏用的C#脚本语言有些不同,并不是编译型语言,虽然lua语言在真正执行以前,也会进行编译,这就意味着脚本里面并不支持c#里的宏定义形式,比如我们常用的平台判定UNITY_ANDROID或是自身定义的一些宏定义。我们需要自己手动构建一个类,并将它wrap,在lua里调用对应的函数。public static class LuaDefine{ public static原创 2017-03-28 20:29:11 · 4215 阅读 · 0 评论 -
项目后期Lua接入笔记09--策划Excel转Lua
既然要使用lua做热更新,策划配表是绕不过去的问题,虽然c#也可以做到热更,毕竟配表就是纯数据,但是使用c#将数据解析到内存的时候,数据格式基本上是固定,几个字段就几个字段,字段类型就是那样了,不够灵活。 Excel转成lua网上有开源的项目,地址如下https://github.com/zhangqi-ulua/XlsxToLua/,感谢张奇给我们贡献的这个开源项目,里面有详细的使用说明,但是在原创 2017-04-07 20:07:27 · 1301 阅读 · 0 评论 -
项目后期Lua接入笔记01--框架及IDE
项目做到后期时,有一些要求行比较高的模块需要做到无bug,及时更新,这些模块一般是活动系统,充值系统等,但是后期接入的话要考虑现有c#的框架。今天开始记录一下遇到的一些坑。框架选择上,选的是tolua框架,主要是以前有过ulua的一些经验,相对来说熟悉度搞一些。当然也不是纯粹的插件框架,是基于插件框架的luaFramework,由于项目是使用的NGUI,所有对应的框架也是基于NGUI的,地址如下:h原创 2017-03-22 19:47:36 · 780 阅读 · 0 评论 -
项目后期Lua接入笔记05--网络协议protobuf在lua中的使用pbc
作为一个网络游戏,不可避免的要和服务端进行数据交互,在数据结构上protobuf是一个不错的方案,在lua中使用protobuf有多种方案可供选择,这里使用的是云风的pbc.先去这个网址下载生成工具http://repo1.maven.org/maven2/com/google/protobuf/protoc/,我这边下载的2.5版本。将protoc.exe放到指定的地方,然后将proto文件拷贝过原创 2017-03-29 19:57:31 · 7099 阅读 · 4 评论 -
项目后期Lua接入笔记06--按钮事件监听及消息分发
按钮事件监听NGUI一般常用的是UIEvenetListener,使用方法一般如下UIEventListener.Get(gameObject).onClick = BtnClick;在Lua代码中使用方式也差不多UIEventListener.Get(gameObject).onClick = this.BtnClick;对于消息分发,Lua里面有一个Event实现了类似的功能,但是我们的需求不只原创 2017-03-30 20:31:58 · 3489 阅读 · 0 评论 -
项目后期Lua接入笔记02--框架剥离
今天开始将lua框架接入项目,因为项目中已经有游戏框架了,所以我们只去框架里的Lua有关的东西。将 Assets\Plugins, Assets\LuaFramework\Editor\CustomSettings.cs, Assets\LuaFramework\Lua, Assets\LuaFramework\Scripts\Manager\LuaManager.cs Assets\Lu原创 2017-03-23 20:09:33 · 780 阅读 · 0 评论 -
项目后期Lua接入笔记07--预制属性转lua代码
有些功能可能已经完成一部分了,或者lua中自己写find属性很麻烦,字符串很长,这里我们需要自己写一个工具来获取这些数据。 需要的功能就是预制体已经有c#并将属性拖入代码文件了,我们将对应的路径转成lua代码using System;using System.Collections;using System.Collections.Generic;using System.Reflectio原创 2017-03-31 20:39:34 · 852 阅读 · 0 评论 -
项目后期Lua接入笔记10--Lua代码优化1
csdn的手机验证终于可以跳过了,不知道产品怎么想的,客服板块都要炸了。本文转自用好Lua+Unity,让性能飞起来——Lua与C#交互篇,感谢原作者提供的好文章从最早的Lua纯反射调用C#,以及云风团队尝试的纯C#实现的Lua虚拟机,一直发展到现在的各种Luajit+C#静态Lua导出方案,Lua+Unity才算达到了性能上实用的级别。但即使这样,实际使用中我们会发现,比起Cocos2dx时代Lu转载 2017-04-17 19:40:31 · 1116 阅读 · 0 评论 -
项目后期Lua接入笔记11--Lua代码优化2
文章转载自Unity3D游戏优化之Lua的内存,感谢原作者燃野 提供的好文章近段时间处理了一些Lua相关的性能和内存问题,分享记录下 1.lua内存增长很快,但gc可以降低的情况 一个小场景,角色站着不动内存就会稳定的增长,对比了unity profiler里的数据,没有特别显著的变化,但是lua内存增长了很多 执行lua gc后会大幅降低。说明是临时对象占用的内存,不gc释放不掉。也确转载 2017-04-18 19:16:53 · 1546 阅读 · 0 评论 -
项目后期Lua接入笔记08--Lua面向对象及LuaBehaviour的再设计
lua类创建和继承的关键是metatable的使用,这里直接使用云风大大的代码(部分修改)local _class={}function class(super) local class_type={} class_type.ctor=false class_type.super=super class_type.new=function(...)原创 2017-04-06 19:47:39 · 1732 阅读 · 0 评论 -
ToLua源码分析:启动流程
ToLua源码解析启动流程转载 2017-11-25 15:30:57 · 2976 阅读 · 0 评论 -
Lua中string.gmatch方法
下面的表列出了Lua支持的所有字符类:字符类:(character classes) . all characters %a letters %c control characters %d digits %l lower -case letters %p punctuation characters %s space characters %u upper-case letters原创 2017-12-29 10:04:42 · 19786 阅读 · 0 评论 -
XLua框架搭建——xLua常用库集成
官方文档里提供了一个集成第三方库的教程,对于日常开发,其实我们经常需要引入一些第三方库,如何加入到项目里,就需要参考这个文档了。一般来说,游戏开发需要用到的库就那么几个,对此,作者为我们集成了几个第三方库,这个集成独立于xlua,具体的见地址https://github.com/chexiongsheng/build_xlua_with_libs,作者集成了lua-protobuf(以前是pb...原创 2018-05-29 20:03:17 · 8277 阅读 · 1 评论