![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Lua
东北砍王
做游戏,是种梦想!
展开
-
Lua type和typeof区别
type 是lua内置的函数,用来获取类型typeof 是一个自定义的函数,为了用来获取cs的类型代码和输入如下:local a = 1print(type(a)) -- numberprint(typeof(a)) -- 报错print(typeof(CS.UnityEngine.Vector3)) -- UnityEngine.Vector3: -2016843720print(type(CS.UnityEngine.Vector3)) -- table...原创 2021-04-04 00:00:15 · 4663 阅读 · 0 评论 -
Lua的_G表里有啥?
今天看xlua源码的时候发现了一个表 _G,如图所示:那它到底啥呢?应该是保存了lua所有用到的全局变量和局部变量比如:这三种用法是一样的_G.print("测试")_G["print"]("测试")print("测试")那里面到底有啥呢?全部输出为:function: 00007FFFFB9ECA60setfenv function: 000001718A717510rawset function: 00007FFFFB9EC6B0_VERSION Lua 5.3print原创 2021-04-03 23:59:39 · 623 阅读 · 0 评论 -
Lua指令编码与解码
编码模式:Lua虚拟机指令可以分为四类分别对应四种编码模式(Mode):1.iABC(39个)携带A B C三个操作数,分别占用8 9 9个比特2.iABx(3个)携带A Bx两个操作数,分别占用8 18个比特3.iAsBx(4个)携带A sBx两个操作书,分别占用8 18个比特4.iAx(1个)携带Ax一个操作数,占用全部26个比特大部分都是iABC的eg:OP_MOVE、OP_LOADK、OPLOADKX、OP_LOADBOOL…操作数:是指令的参数,每条指令可以携带1到原创 2021-04-01 20:08:37 · 614 阅读 · 0 评论 -
Lua指令集简介
本文借鉴《自己动手实现Lua:虚拟机、编译器和标准库》,算是对自己学习的总结,也希望分享下所学知识~~高级编程语言虚拟机是对真实计算机的模拟和抽象。指令集(Instruction Set)可以大致分为两类:1.基于栈(Stack Based)2.基于寄存器(Register Based)Java、.Next CLR、Python 都是基于栈的虚拟机Lua虚拟机时基于寄存器的虚拟机(Lua 5.0之前使用的基于栈的,之后就改成了基于寄存器的)区别:1.基于栈的虚拟机需要使用PUSH类指令往栈原创 2021-04-01 20:07:55 · 671 阅读 · 0 评论 -
chunk总体结构(头部)
本文借鉴《自己动手实现Lua:虚拟机、编译器和标准库》,算是对自己学习的总结,也希望分享下所学知识~~二进制chunk主要分为两部分:可以使用 xxd 命令观察一下 luac 文件$ xxd -u -g 1 hello_world.luac00000000: 1B 4C 75 61 53 00 19 93 0D 0A 1A 0A 04 08 04 08 .LuaS......00000010: 08 78 56 00 00 00 00 00 00 00 00 00 00 00 00 00 .xV原创 2021-04-01 20:07:11 · 639 阅读 · 0 评论 -
chunk的数据格式
本文借鉴《自己动手实现Lua:虚拟机、编译器和标准库》,算是对自己学习的总结,也希望分享下所学知识~~lua的二进制chunk和java的class文件类似本质上也是一个字节流注意:1.二进制chunk没有考虑跨平台的需求,对于需要使用超过一个字节表示的数据,表需要考虑大小端(Endianness)的问题2.二进制chunk格式的设计也没有考虑过不同Lua版本之间的兼容问题。当编译Lua脚本时,直接按照当时的Lua版本生成二进制chunk文件,当加载二进制chunk文件时,会检查被夹在文件的版本号原创 2021-04-01 20:06:48 · 913 阅读 · 0 评论 -
反编译chunk
本文借鉴《自己动手实现Lua:虚拟机、编译器和标准库》,算是对自己学习的总结,也希望分享下所学知识~~二进制chunk之所以使用二进制格式,是为了方便虚拟机加载,然后对人类很不友好那咋办呢?luac -l 可以切换到反编译模式$lua -l hello_world.luacmain <hello_world.lua:0,0>(4 intructions at 0x7fc43fc02e40) 0+ param, 2 slots, 1 upvalue, 0 locals, 2 c原创 2021-04-01 20:06:09 · 630 阅读 · 0 评论 -
什么是chunk?
本文借鉴《自己动手实现Lua:虚拟机、编译器和标准库》,算是对自己学习的总结,也希望分享下所学知识~~什么叫Chunk?一段可以被Lua解释器解释执行的代码就叫做chunk可以很小,小到只有一两条语句;可以很大,大到包含成千上万条语句喝复杂的函数定义Lua为了提高效率,并不是直接解释执行chunk,先由编译器编译成内部结构(其中包括字节码等信息),再由虚拟机执行字节码这种内部结构叫做:**预编译(Precompiled)chunk,由于采用了二进制格式,也叫做二进制(binary)chunk(原创 2021-04-01 20:05:36 · 4826 阅读 · 0 评论 -
Lua 介绍
Lua是一种 简单、可扩展、可移植及高效的脚本语言是一种面向 C 的 API 存在一个特别的 虚拟栈 ,通过这个栈与lua交换数据栈大大简化了C API 的设计与使用,还能保证 其他语言与lua 有效的隔离开从设计目的来讲:1.就是某一个功能模块,通过lua进行扩展2.想只靠lua开发程序,是不太现实的...原创 2021-04-01 20:05:13 · 82 阅读 · 0 评论 -
xLua介绍
xLua地址:传送门Xlua是啥?2016年 腾讯推出的 一种 unity下 lua 编成的解决方案基本概念介绍:1.模块模块就是一个 程序库,可以通过 require 加载,得到了一个表示 table的全局变量这个table 就像一个命名空间,他的内容就是模块中导出的所有东西,比如:函数和常量2.require 函数Lua 提供了一个名为 require 的函数来加载模块。执行 require 后会返回一个由模块常量或函数组成的 table,并且还会定义一个包含该 table 的全局变量原创 2021-04-01 20:04:23 · 1067 阅读 · 0 评论 -
toLua介绍
toLua地址:传送门我也是刚初学lua,项目使用的toLua,所以直接下载toLua并使用Example进行学习一波~Lua的语法推荐在菜鸟上看:传送门1.hello world.csusing UnityEngine;using LuaInterface;using System;public class HelloWorld : MonoBehaviour{ void Awake() { LuaState lua = new LuaState();原创 2021-04-01 20:03:25 · 304 阅读 · 0 评论 -
热更新介绍
啥玩意是热更新呢?当游戏出现bug,或者需要修改,增加某个功能的时候,不需要重新下载安装包,就可以更新游戏内容游戏上线后,如果想更新游戏内容或者修复现网bug咋整呢?一般有两种做法:1.重新打包上传一个新的安装包到应用商店(需要审核,费时间),然后让玩家下载客户端安装包(需要重新下载,费流量)。会导致一部分玩家流失。2.在游戏内更新,游戏启动时去下载需要更新的资源常用的热更方案:1.APK增量更新拆成差分包然后合并(安卓上支持,IOS不支持)2.AssetBundle资源热更新Asse原创 2021-04-01 20:02:30 · 154 阅读 · 0 评论