Lua相关
MagicianThirteen
这个作者很懒,什么都没留下…
展开
-
Mac上查找lua安装路径
打开控制台,输入,which lua原创 2020-10-17 21:21:51 · 1196 阅读 · 0 评论 -
lua调用c#之Lua使用C#重载函数
c#代码#region 函数重载public class CallFun{ public int Calc() { return 100; } public int Calc(int a,int b) { return a + b; } public int Calc(int a) { return a; } public float Calc(float a)原创 2020-10-08 22:44:15 · 573 阅读 · 1 评论 -
lua调用c#之Lua使用C# ref和out函数
c#代码:using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;#region ref和outpublic class RefOut{ public int RefFun(int a,ref int b,ref int c,int d) { b = a + d; c = a - d; return 100;原创 2020-10-08 20:04:49 · 1118 阅读 · 0 评论 -
lua调用c#之Lua使用C#拓展方法
c#代码using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;#region 拓展方法/// <summary>/// 想要在lua中使用拓展方法,一定要在工具类加特性/// 建议lua中要使用的类都加上该特性,可以提升性能/// 如果不加该特性,除了拓展方法对应的类,其它的类虽然不会报错/// 但是lua是通过反射机制去调用c#类 效率较低/// &原创 2020-10-08 15:45:03 · 415 阅读 · 0 评论 -
lua调用c#之lua调用c#中的数组,list,字典
lua代码:print("调用c#里的数组,list,字典")--*****************数组******************--[[c#里的数组在lua中相当于userdata保留了其结构c#怎么用,lua就怎么用]]--CS.CallArray_list_Dic--ps:c#那边的类取名少用下划线local ca=CS.Callarray()--获取数组长度print(ca.arr.Length)--获取数组元素print(ca.arr[0])--遍历原创 2020-10-08 14:35:29 · 5037 阅读 · 0 评论 -
lua调用c#之Lua使用C#枚举
lua代码:CallEnum.lua--[[ 枚举调用 1.调用unity当中的枚举 枚举的调用规则和类调用规则是一样的 CS.命名空间.枚举名.枚举成员 也支持取别名 小技巧:不记得函数的具体写法就在c#里写一遍,有提示]]PrimitiveType=CS.UnityEngine.PrimitiveTypeGameObject=CS.UnityEngine.GameObjectlocal obj = GameObject.CreatePrimitive(PrimitiveType.C原创 2020-10-08 00:40:43 · 1938 阅读 · 1 评论 -
Lua调用c#之调用c#类
首先:lua没有办法直接访问c#,一定是先从c#调用lua脚本后c#主入口using System.Collections;using System.Collections.Generic;using UnityEngine;/// <summary>/// lua没有办法直接访问c#,一定是先从c#调用lua脚本后/// 才把核心逻辑交给lua编写/// mian相当于是入口一样/// </summary>public class Main : MonoBeh原创 2020-10-07 23:49:38 · 1199 阅读 · 0 评论 -
c#调用lua之用LuaTable映射table(引用拷贝,效率低,有垃圾,不建议使用)
注意:官方不建议用luatable,和luafunction去映射table,和table里的函数,因为效率低,有垃圾,这种是引用拷贝,改了值会反映在lua文件中,而且如果luatable不用了一定要释放dipose,不然产生垃圾test.lua--class--这样定义的表相当于是个自定义的类,有成员变量和成员函数testClass={ testInt=1, testBool=true, testFloat=1.3, testString="13", testFun=function (原创 2020-10-03 22:29:14 · 845 阅读 · 0 评论 -
c#调用lua之接口映射table(引用拷贝)
注意:接口没有成员变量,只有属性,包括对应的函数都不能用委托,如果无参,无返回值可以用unityaction,而且接口去接要打上csharpcalllua标记,而且接口是引用拷贝!!!改了值会反应在lua定义的表中test.lua--class--这样定义的表相当于是个自定义的类,有成员变量和成员函数testClass={ testInt=1, testBool=true, testFloat=1.3, testString="13", testFun=function () -- b原创 2020-10-03 16:39:50 · 312 阅读 · 0 评论 -
c#调用lua之把lua中的表映射到c#中的类
test.lua--class--这样定义的表相当于是个自定义的类,有成员变量和成员函数testClass={ testInt=1, testBool=true, testFloat=1.3, testString="13", testFun=function () -- body print("nihaoyahahahahha") end, testInClass={ testInInt=13 }}c#代码using System.Collections;u原创 2020-10-03 12:12:26 · 532 阅读 · 1 评论 -
c#调用lua之用list,dictionary映射table
test.lua--ListtestList={1,23,4,5,7,8}testList2={"1",true,23,"13"}--dictionarytestDic={ ["1"]=1, ["2"]=2, ["3"]=3, ["4"]=4, ["5"]=5}testDic2={ ["true"]=true, ["1"]=13, ["false"]= -1, ["13"]=true}c#代码using System.Collections;using Sys原创 2020-10-03 10:48:22 · 608 阅读 · 0 评论 -
c#调用lua之全局函数的获取
test.lua代码testfun=function() -- body print("no args")endtestfun1=function(a) -- body print("args returns") return a+1endtestfun2=function( a,... ) -- body print("many args") print(a) args={...} for k,v in pairs(args) do print(k,v) ende原创 2020-10-02 22:29:13 · 279 阅读 · 0 评论 -
C#调用Lua之全局变量的获取(简单类型(string,number,boolean)
(一)获取lua文件中的简单变量的全局变量注意,get方法只能获取lua文件里的全局变量,获取不到局部变量主lua文件代码:print("主lua脚本启动")--整个文件算所有lua文件的主入口--只要执行lua文件,xlua都会去找自定义的加载器去加载整个lua文件require("Test")Test lua文件代码:print("Test.lua")testNumber=1testBool=truetestFloat=1.3testString="13"c#中函数代码原创 2020-10-01 22:05:34 · 587 阅读 · 0 评论 -
Lua解析器管理器(封装解析器通用函数(销毁解析器,垃圾清理),通过ab包加载lua文件的加载器)
(一)做一个lua管理器,保证解析器的唯一性,封装一些解析器常用函数单例模式代码:/// <summary>/// 单例模式基类/// </summary>public class BaseManager<T> where T:new(){ private static T instance; public static T GetInstance() { if (instance == null) {原创 2020-10-01 19:35:53 · 797 阅读 · 0 评论 -
C#调用Lua之Lua解析器(常用函数,默认路径下加载lua文件,自定义加载器加载lua文件)
Lua解析器作用:让unity能够执行lua语言(一)导入xlua步骤:xlua源代码中assets文件夹中的plugins文件夹和xlua文件夹,放到unity工程中的asset目录下,xlua中的tools文件夹,放在项目的asset目录的同级目录下。然后配置playersetting,最后编辑器会出现热补丁注入的选项,如图所示测试脚本:using System.Collections;using System.Collections.Generic;using UnityEngine;原创 2020-10-01 14:37:54 · 788 阅读 · 0 评论 -
Lua语法详解之垃圾回收
--垃圾回收--垃圾回收关键字:collectgarbage--获取当前lua占用内存数,以k字节为单位,如果乘以1024,是具体占用字节数print(collectgarbage("count"))--97.173828125 kb--进行垃圾回收,有点类似c# 里的gccollectgarbage("collect")print(collectgarbage("count"))--76.1298828125,比上面的97kb释放到76kb--lua中有自动定时进行gc方法,而且lua热更新原创 2020-09-27 09:39:51 · 266 阅读 · 0 评论 -
Lua语法详解之自带库
--自带库--string--table--时间print(os.time())--1601168290print(os.time({year=2020,month=9,day=25}))--1601006400--os.date("*t")传回来的是张表local now=os.date("*t")print(now)--table: 0x7fa99f604360for k,v in pairs(now) do print(k,v)end--[[month 9hour 9yd原创 2020-09-27 09:28:03 · 266 阅读 · 0 评论 -
Lua语法详解之多态
--面向对象实现--万物之父 所有对象的基类 objectObject={}--实例化方法function Object:new() local obj={} --给空对象设置元表,以及__index self.__index=self setmetatable(obj,self) return objend--继承function Object:subClass(className) --根据名字生成一张表,就是一个类 _G[className]={} local obj=_原创 2020-09-20 22:13:32 · 620 阅读 · 0 评论 -
Lua语法详解之面向对象继承
-实际继承使用--实现,学生继承自人类,调用人类里的sex成员person={}person.sex="false"--构造函数function person:new() local temp={} setmetatable(temp,self) self.__index=self return tempend--让学生继承自这个人类function person:subClass(subClassName) _G[subClassName]={}--用到了大G表通过键值对,存储所原创 2020-09-11 16:36:59 · 130 阅读 · 0 评论 -
Lua语法详解之面向对象封装
--面向对象封装--注意一切的面向对象,都是表print("**********")object={}object.id="13"function object:new() local obj={} return objend--定义一个object表,然后通过它的new方法(自定义的),返回一个空表,相当于,在--new方法相当于一个构造函数,返回了一个对象local temp=object:new()print(temp)--table: 0x7fe537413640--要让原创 2020-09-11 15:15:46 · 218 阅读 · 0 评论 -
Lua语法详解之元表(概念,设置,获取,运算符重载,__string,__call,__index,__newindex,rawget,rawset)
(一)元表的概念–任何表变量都可以作为另一个表变量的元表–任何表变量都可以有自己的元表–有元表的那张表相当于子表–作用:当对子表进行一些特定操作时,会执行元表中的内容(二)设置元表--如何设置元表metatable={}mytable={}--第一参数子表,第二个参数元表setmetatable(mytable,mytable)(三)元表的特定操作(1)元表的特定操作_tostring,把子表当成某个设定好的特定字符串--元表的特定操作__tostring,把子表当成某个设定好的原创 2020-09-11 12:51:45 · 402 阅读 · 0 评论 -
Lua语法详解之协同程序(创建,运行,挂起,状态)
(一)协程的创建--协同程序--在lua中协程的本质是线程--协程的创建--(常用)第一种创建方式,coroutine.create(),返回值是一个线程fun=function() print("hello")endco=coroutine.create(fun)print(co)--thread: 0x7faa1450dc48print(type(co))--thread--第二种创建方式,coroutine.warp(),返回值是一个函数co1=coroutine.wrap原创 2020-09-11 09:39:58 · 650 阅读 · 0 评论 -
Lua语法详解之(多变量赋值,函数多返回值,三目运算符的实现)
(一)多变量赋值--多变量赋值a,c,d="1",13,trueprint(a)--1print(c)--13print(d)--true--多变量赋值时,如果值的个数不够变量的个数,变量为空a,c,d="1",13print(a)--1print(c)--13print(d)--nil--多变量赋值时,如果值的个数多了,值会自动舍弃,只会有几个变量赋几个值a,c,d="1",13,14,17print(a)--1print(c)--13print(d)--14(二)多返回原创 2020-09-10 22:06:38 · 898 阅读 · 0 评论 -
Lua语法详解之多脚本执行(require, package,_G)
(一)全局变量--全局变量a=1--全局变量c=3--全局变量for i=1,3 do d="world"endprint(d)--d,这里是d出了循环体还能用,是全局变量(二)本地变量,local--本地变量的关键字是localfor i=1,3 do local e="world"--这个e只能在这个循环里使用 print("hell"..e)--打印三次,hellworldendlocal f="root"print(f)--root(三)多脚本执行:require原创 2020-09-10 20:46:49 · 811 阅读 · 0 评论 -
Lua语法详解之表(公共操作:插入,删除,排序,拼接)
(一)插入t1={{name="a",age=13},{name="c",age=14},{sex=false}}t3={love="love",age=13}--插入print(#t1)--插入前3table.insert(t1,t3)--把t3的表插到t1后面print(#t1)--插入后4print(t1[1].name)--aprint(t1[4].love)--love(二)删除--删除t1={{name="a",age=13},{name="c",age=14},{sex原创 2020-09-10 19:41:39 · 1527 阅读 · 0 评论 -
Lua语法详解之表(用表表现类,点号,冒号,self)
Lua默认没有面向对象的概念,需要自己实现(一)声明类,调用类里的成员变量和方法--类和结构体--c#中类有成员变量和成员函数,lua没有面向对象的概念要自己实现--定义类student={ --name name="root", --age age=13, --upper function upper=function() print("I level up") end, --study function study=function() print("I am stu原创 2020-09-10 15:59:11 · 393 阅读 · 0 评论 -
Lua语法详解之表(复杂数据类型:用表实现字典)
(一)字典的声明--字典的声名--字典是键值对a={["name"]="root",["age"]=18,[1]=13,[true]=7,["1"]=3}(二)字典的单个元素访问--第一种访问方式:print(a["name"])--rootprint(a[1])--13print(a[true])--7--第二种访问方式:这种方式只适合当键是字符串的形式,且字符串不能是数字,适合这种["name"]="root",不适合这种[1]=13,[true]=7,["1"]=3print(a原创 2020-09-10 10:00:49 · 1307 阅读 · 0 评论 -
Lua语法详解之表(迭代器遍历,pairs,ipairs)
迭代器就是用来遍历表的,因为#判断表的长度不准确,一般不建议用#来判断长度,遍历表(一)ipairs--ipairs,还是从下标为1开始遍历的,小于,等于0的下标的值无法参与遍历,也就是从4,5,0遍历--ipairs只能找到连续索引的键,如果中间断序了,它也无法遍历后面的,如da={[0]=1,4,5,[-1]=8,0}for k,v in ipairs(a) do--k是键,v是值 print("key value"..k.."_"..v)end--key value1_4,key val原创 2020-09-10 09:28:07 · 1615 阅读 · 0 评论 -
Lua语法详解之表(用表表示,数组,数组遍历(一维,二维),自定义索引)
ps:lua中没有数组,字典这种概念,只不过是通过表展示这些概念的特征。(一)数组--数组--lua中索引从1开始a={1,3,4,5,7,9,10}c={1,"13",true,5,nil}d={nil,5,7}e={5,nil,7}f={nil}g={1,3,nil,4,"13",true,nil}print(a[1])--1print(c[3])--true--获取数组长度,注意当为nil结尾时,nil会被忽略,不占长度,当表中有nil--元素的时候,会影响表中实际长度的获取原创 2020-09-09 20:02:17 · 2778 阅读 · 0 评论 -
Lua语法详解之函数(变长,嵌套闭包,多返回值)
(一)无参的函数--函数 --语法格式--第一种:function 函数名()-- end--第二种:a=function()-- end --1.无参数无返回值 function F1() print("F1 function") end F1() a=function() print("a function") end a() c=a c()--也是打印 a function --注意,不能把F1()放在函数定义之前,会报错,这点和c原创 2020-09-07 22:28:35 · 799 阅读 · 0 评论 -
Lua语法详解之循环
--循环--while 条件 do endnum=0while num<4 do print(num) num=num+1end--repeat until--repeat......until 条件(结束条件)num=0repeat print(num) num=num+1until num>5 --这里是个结束跳出条件,与c#不同,c#的do while中的 while 是进入循环的条件--for --for 起始条件,结束条件,步长 do endfor i原创 2020-09-06 19:22:19 · 383 阅读 · 0 评论 -
Lua语法详解之条件分支语句
(一)写法-- if 条件 then end--单分支a=9if a>5 then print("a>5 true")end--双分支if a>5 then print("a>5 true")else print("a>5 false")end--多分支,elseif要注意,连着写a=5if a>5 then print("a>5")elseif a<5 then print("a<5")elseif a==9原创 2020-09-03 19:45:47 · 430 阅读 · 0 评论 -
Lua语法详解之运算符
(一)算数运算符--+ - * / % ^--lua中没有自增,自减运算符:++ ----lua中没有复合运算符,如:+=,-=,*=,%=print(1+2)a=1b=2print(a+b)print("123"+1)--lua中会把字符串转成数字,小数也支持,进行运算,结果:124.0print("123.4"+1)--结果:124.4print(1%2)--结果:1,整数取余是整数print("123.4"%2)--结果:1.4,注意这里小数取余还是小数print(3^4)--原创 2020-09-02 20:49:51 · 2121 阅读 · 0 评论 -
Lua语法详解之字符串操作
(一)声明str="这是双引号字符串"str="这是单引号字符串"(二)获取字符串长度1.中文字符在长度里面占了3长度,英文字符占1个长度2.长度直接在变量前用#str="abSFE"--这个长度是5str="abSFE你好啊"--这个长度是14,而不是8str="好"--中文字符在长度里面占了3长度,英文字符占1个长度print(#str)(三)多行打印字符串1.lua中支持转义字符2.第二种用[[]]print("123\n345")--第一种用转义字符s=[[我爱原创 2020-09-02 20:09:45 · 1006 阅读 · 0 评论 -
lua语法详细讲解之变量
(一)简单数据类型nil,num,string,boolean(二)复杂数据类型(后面写)函数:function表:table数据结构:userdata协程:thread(线程1)(三)简单数据类型的声明变量声明都不用声明类型,一个变量可以随便赋值a=nil;//nil类似于c#中的空--所有数值都是number...原创 2020-09-02 16:42:42 · 226 阅读 · 0 评论