Lua
Lua学习
Data菌
这个作者很懒,什么都没留下…
展开
-
通信协议-FlatBuffer-Lua对象的序列化与反序列化
上篇文章介绍了FlatBuffer描述文件编写和转换,本篇介绍Lua代码中如何实现协议的序列化和反序列化操作。另外为了可以在Unity中可以执行Lua代码,把XLua插件导入测试工程。测试脚本using System.Collections;using System.Collections.Generic;using System.IO;using UnityEngine;using XLua; /* * Author:W * Lua脚本中关于FlatBuffer协议的序列化原创 2021-05-13 19:35:22 · 1076 阅读 · 0 评论 -
xlua-Lua代码访问C#
lua代码如何访问C#代码的变量方法呢?本篇文章做了比较详细的介绍C#代码部分如下using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;namespace Framework{ [LuaCallCSharp] public enum ChannelType { None, QQ, WeChat, WeiBo, }原创 2021-05-06 15:12:02 · 442 阅读 · 0 评论 -
xlua-C#代码访问lua的变量和函数
C#代码如何访问lua代码中数据呢?主要基本数据类型、table以及function函数等。lua代码脚本如下--Lua全局变量--[[基本数据类型]]--Num = 100;Name = 'Hello';IsOk = true;--[[table表数据]]-- example_table={ id = 'W', age = 10, sex = 0, 1,--多余变量1 2,--多余变量2 setSex = function(self,sex原创 2021-04-30 19:35:38 · 464 阅读 · 2 评论 -
xlua-lua代码中异步调用
某些特殊情况下,为了不卡住当前主线程,需要把一些耗时、不需要同步执行的操作放到另外一个线程中执行,比如:文件下载、服务器请求处理等。那么如何在lua中实现异步呢?xlua为我们提供了工具类。C#测试代码using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;using UnityEngine.UI;/* * Author:W * Lua异步原创 2021-04-29 17:50:25 · 1964 阅读 · 0 评论 -
xlua-lua脚本使用协程
lua代码如何使用协程?原理很简单,就是把Unity的MonoBehaviour脚本C#对象封装出来给Lua代码用。1.创建C#协程对象:CoroutineRunnerusing System.Collections;using System.Collections.Generic;using UnityEngine; /* * Author:W * 协程类封装 */public class CoroutineRunner : MonoBehaviour { // Use原创 2021-04-28 12:10:06 · 621 阅读 · 0 评论 -
xlua-C#和lua代码之间相互访问
本篇文章主要介绍lua与C#代码之间的互访以及C#的常用组件Behaviour脚本周期函数的Lua版封装的实现。using System;using System.Collections;using System.Collections.Generic;using System.IO;using UnityEngine;using XLua;/* * Author:W * Lua与C#代码之间的相互访问 * Lua版的MonoBehaviour脚本生命周期函数封装 * */原创 2021-04-27 21:43:38 · 352 阅读 · 0 评论 -
xlua-lua代码文件的4种加载引用方式
我们编写的lua文件,是如何被加载使用的呢?大概有4种方式加载引用:1)Inspector面板赋值2)Resource文件夹加载,需要注意的是因为Resource只支持有限的后缀,放Resources下的lua文件得加上txt后缀3)Require标签引入,相当于一个Loader加载器,lua文件默认在Resources文件夹下4)自定义加载Loader,比如从服务器下载存放在本地某文件夹下的Lua文件using System;using System.Collectio...原创 2021-04-27 15:40:58 · 1118 阅读 · 0 评论 -
xlua-创建lua代码运行的虚拟机
游戏项目中,使用热更新是很常见的。主流的热更方案有xlua、tolua以及ILRuntime等。其中xlua是鹅厂开源的热更框架。笔者在公司使用的是xlua,想结合实际运用经验,分享一些关于xlua的知识。本篇文章简单介绍lua代码的运行环境即虚拟机。熟悉java的朋友都知道java代码的运行,也是建立在java虚拟机之上的。虚拟机,顾名思义:它是特定代码能够正常执行的根本。鹅厂开放的xlua框架,实质是让我们可以在Unity项目中编写lua代码文件来实现业务逻辑功能,并且允许C#与Lua代码之间相互访原创 2021-04-27 10:15:22 · 702 阅读 · 0 评论 -
lua-元表
--元表:可以实现对2个table的操作,也可以实现改变table的行为,每个行为关联对应的元方法--setmetatable(table,metatable):为table设置元表--getmetatable(table):获取table的元表table1 = {}metatale1 ={}setmetatable(table1,metatale1)--__Index元方法:用来对表访问。利用键来访问table的时候,如果这个键没有值,那么会寻找table的元表metatable,如果有原创 2020-07-01 23:25:48 · 190 阅读 · 0 评论 -
lua-表
---table表:是一种数据结构,可以当做数组、字典来用;另外,也用来解决模块、包、对象的相关问题table1 = {}print("table的类型:",type(table1))--移除引用,lua垃圾回收会释放内存table1 = nilprint()--table操作--连接nameArr = {"Wang","Lun","Qiang"}print(table.concat(nameArr))--指定隔开符print(table.concat(nameArr,","))原创 2020-06-30 23:00:22 · 218 阅读 · 0 评论 -
lua-迭代器
--迭代器:在Lua中常使用函数来描述迭代器,每次调用该函数返回集合的下一个元素。迭代函数、状态常量、控制变量3部分组成arr1={"z","b"}for k,v in pairs(arr1)do print(k,v)endprint()--无状态的迭代器:指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费的额外代价--square-迭代函数 max-状态常量 curNum-控制变量function square(max,curNum) if(cur原创 2020-06-30 00:09:37 · 361 阅读 · 0 评论 -
lua-数组
--数组--一维数组,注意:默认从索引1开始arr = {"a","b"}print(arr[1])--二维数组arr2 = {{"c",1},{"w",true}}print(arr2[2][2])原创 2020-06-23 22:59:43 · 390 阅读 · 0 评论 -
lua-字符串
--字符串--声明的3种方式--双引号str1="WWW"--单引号str2='LLL'--双中括号str3=[[QQQ]]print(str1)print(str2)print(str3)print()--字符串操作str = "Wang"--大写print(string.upper(str))--小写print(string.lower(str))--字符替换print(string.gsub("abcd","a","b"))--返回具体字符的位置pr原创 2020-06-23 22:48:10 · 288 阅读 · 0 评论 -
lua-运算符
--运算符a=10b=5--算术运算符--加法print(a+b)--减法print(a-b)--乘法print(a*b)--除法print(a/b)--取余print(a%b)--幂print(a^2)--负号print(-a)--关系运算符--等于print(a==b)--不等于print(a~=b)--大于print(a>b)--小于print(a<b)--大于等于print(a>=b)--小于等于print(原创 2020-06-23 22:15:53 · 334 阅读 · 0 评论 -
lua-函数
--一般函数定义function Sum(num1) print(num1)end---可变参数函数定义function avager(...) print(#arg) for i=1,#arg do print(arg[i]) endendavager(1,2,3)原创 2020-06-23 21:46:36 · 217 阅读 · 0 评论 -
lua-条件控制
--条件控制--if 语句if (true)then print("if")end--if-else 语句if(false)thenelse print("if - else")end--if-elseif 语句if(false)thenelseif(true)then print("if - elseif");end原创 2020-06-22 23:26:03 · 221 阅读 · 0 评论 -
lua-循环
--循环--while循环while(true)do print("while")end--for 循环for i=0,15,1do print(i)end--do while 循环 注意:true 执行一次 false 循环执行repeat print("do while")until (true)--foreach 循环arr = {"1",4,true,"H"}--遍历到nil,就停止了for k,v in ipairs(arr)do p原创 2020-06-22 22:53:08 · 467 阅读 · 0 评论 -
lua-数据类型
--lua 数据类型--nil 相当于c# null 无效值print(a)--boolean 相当于c# bool-- and or not c# && || !print(true)print(false)print(true and true)print(true or false)print(not true)--number 相当于c# int double float long...b=9c=9.534423423print(ty原创 2020-06-22 21:56:09 · 273 阅读 · 0 评论