Lua
Lua相关的技术分享
水曜日鸡
死宅程序员,守护最好的二次元
展开
-
【Lua篇】《Lua程序设计》全书内容总结
这篇文章是《Lua程序设计》的读书笔记和概要。帮助没有看过的童鞋快速浏览书中内容,已经看过的可以也能借助这篇文章复习一遍。第1章 开始1.1 程序块程序块,即chunk,由一行或多行lua可执行的代码构成。下面两段代码,一个是程序块一个不是。-- 是程序块function f(a,b) return a*a - b*b;end-- 不是程序块do return 1;一般使用dofile或require来执行程序块。1.2 词法规范lua变量不能以数字开头,也要原创 2020-07-12 01:47:33 · 1750 阅读 · 0 评论 -
【Lua与C#交互⑤】Lua中的注册表和引用系统
在导入了xlua或者tolua后,我们能在lua代码里写CS.UnityEngine.xxx来调用unity的API。那么这个功能是如何实现的呢?为了解开这个疑惑,我们需要了解lua里面的注册表和引用系统。注册表(Registry)是一个全局的table,它只能被C代码访问。通常,可以用它来保存那种需要在几个模块中共享的数据。注册表由一个叫LUA_REGISTRYINDEX的索引可以找到。它在lua的c源码里被定义如下。它是一个伪索引(Pseudo-Index)。为什么叫伪索引?因为这个索引对应的原创 2020-06-20 18:15:47 · 652 阅读 · 0 评论 -
【Lua与C#交互④】如何让Lua打印到Unity控制台
今天要讲的如何让Lua打印到Unity控制台?相信用过tolua或者xlua的人都知道,在lua脚本里面只要写一行print就能打印到unity控制台效果类似Debug.Log。那么它们背后的原理是什么呢?如果自己实现一个类似的函数替换功能又该如何实现?耐心看完,你会有更多收货。...原创 2020-06-18 01:12:39 · 1397 阅读 · 0 评论 -
【Lua】之面向对象,类的完整实现
Lua面向对象作为游戏面试时的高频考试题,属于必须会的知识点。以下内容提供了一个完整的类的创建模板。包括继承,函数重载,构造函数以及类的实例化。基类模板的创建,新建一个BassClass.lua存放下面内容。以后每定义一个新的类,这个脚本都不用更改local _class = {}local function Init(obj, ...) local create cr...原创 2020-02-11 22:32:44 · 583 阅读 · 0 评论 -
Unity2019生成xLua的wrap代码时报错
Type.IsSZArray没有找到Dictionary的部分构造方法报错解决办法:给xLua生成代码的配置文件(xLua里默认是叫ExampleConfig的文件)加入对应的黑名单,使用BlackList的特性。IsSZArray是属性,可以直接使用官方的方法。Dictionary那个是泛型而且是构造方法,比较复杂。具体参考下面的写法。 //黑名单 [BlackLi...原创 2020-04-22 20:43:04 · 2356 阅读 · 2 评论 -
【Lua与C#交互①】Lua中的栈
关于Lua如何与C#交互这方面的知识,自己平时只会用xLua或者toLua的接口。背后原理完全一窍不通,之前找工作时就被面试官问倒了,所以有了这系列文章。这篇文章是系列第一篇,所以会讲解一个最简单的例子。首先,Lua内部会维护一个堆栈。请大家注意图上标记的索引,Lua通过索引来拿到栈里面的数据,这些数据包括function、table、数值、string、bool等。1代表栈底,往上递增...原创 2020-04-26 23:42:22 · 1464 阅读 · 1 评论 -
【Lua与C#交互②】加载Lua文件
今天继续学习Lua和C#的交互,今天要讲的是加载Lua文件。之后的例子都会使用tolua来写,因为tolua提供的lua原生api比xlua更多。当然你也可以自己编译lua的dll放到unity里面。加载文件使用的是luaL_loadfile这个api,案例如下:结果是先打印100,再打印200var L = LuaDLL.luaL_newstate();var path = Appl...原创 2020-04-29 23:03:23 · 1399 阅读 · 0 评论 -
【Lua与C#交互③】方法调用和错误处理函数
上篇文章简单说到了 lua_pcall 这个方法,不过没有考虑到参数和返回值的情况,本节重点讲这个函数,还会讲如何把C#端的方法放在lua的栈上以供lua调用。先上代码:var L = LuaDLL.luaL_newstate();var path = Application.dataPath + "/Examples/03_Function/03.lua";LuaDLL.luaL_l...原创 2020-05-03 19:32:33 · 1246 阅读 · 0 评论 -
【Lua运行时热重载功能实现①】检测Lua文件发生变化
这几天由于项目组需要一直在琢磨一个功能,就是如何在unity编辑器下不需要重启游戏就能让lua文件改动后立刻生效。如果能够实现这个功能,那会大幅提高开发效率。查了一圈,网上的结果都不太满意,要么只有理论没有源码,要么有源码但是考虑的情况过于简单。所以自己打算写博客告诉大家,我是怎么实现的,并且提供完整源码。github工程地址使用的unity2019.3.0 + xlua。改成其他lua也是可以用,只要在传入luaEnv的时候做相应改动就可以了。这个功能大体分为两大步:检测哪些lua文件发生变化原创 2020-05-10 21:31:55 · 2069 阅读 · 0 评论 -
【Lua运行时热重载功能实现②】重载Lua模块、替换函数
上篇说到检测Lua文件发生变化,这篇来讲怎么重载lua模块。请配合github工程来看。关于重载lua的功能在Hotfix.lua脚本上。这个脚本有三个函数,hotfix、update_table、update_func。hotfixfunction hotfix(filename) print("start hotfix: ",filename) local oldModule if package.loaded[filename] then oldModu原创 2020-05-11 00:02:23 · 1735 阅读 · 0 评论