在上一节我们学习了AssetBundle的知识点,这个是官方给我提供的打包方式,它的特点就是简单、快捷,是把一些具体的算法都进行了封装,我们只要使用就行了;可是热更新的内容并不是只有这些,其实它的重点是lua,基本上所有的热更新就是lua。一定会有人问了,到底什么是热更新?到底什么又是lua?不急,我们一个一个来回到。我们就以王者荣耀来举个例子,王者荣耀在每隔一段时间都会进行更新,你可以把这个就理解成热更新。那什么又是lua呢?我们开发游戏一定是要编程的,unreal4用的是c++,unity用的是c#,那么更新也是需要编程的,lua就是它的编程语言。
首先我们来看看lua的定义:lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。从上面的话中我们只需要知道一点就是,它是用C语言编程的,所以其中的一些规则应该和C语言一致。好了,接下来我们要学习lua的语法,我会把它与c#中的语法进行计较的。
1Lua基本语法
1.1Hello Word!这个可是经典啊 print("Hello World!"),这个是lua中的输出,与C语言一致,注意一点是lua中的语句,你可以写;也可以不写;
Console.WriteLine("Hello World!")这个是c#中的输出。
1.2注释
--单行注释 --[[ --]]多行注释 lua
//单行注释 多行注释 c#
1.3标识符
lua标识符用于定义一个变量,函数获取其他用户的项,与从c#一致,跳过
1.4关键字
用到的时候再说,与c# c一致,跳过。
1.5全局变量
在默认情况下,变量总是认为全局的。全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是nil(就是c#中的null)。
2Lua数据结构
Lua是动态类型语言,变量不要类型定义,只需要为变量赋值。值可以存储在变量中国,作为参数传递或结果返回。Lua中有8个基本类型分别为 nil、 boolean、number、string、userdata、function、thread和table。
2.1nil(空)
nil类型表示一种没有任何有效值,它只有一个值nil
2.2boolean(布尔)
一看到这个我们就知道它和C#中的bool是一回事。boolean类型只有两个可选值:true和false。注意一点的是在Lua中把nil也当作false。
2.3 number(数字)
lua默认只有一种number类型--double(双精度)类型。也就是说在lua中定义int和float是同一个类型的,这与c#中是不同的,c#是区分整型和浮点型的。
2.4string(字符串)
与c#中不同
lua中字符串:由一对双引号或者单引号来表示。表示的意思一样。也可以从[[]]来表示一块字符串。
c#中的字符串:“”表示字符串 ‘'表示字符。
从上面的图中我们也看到了在对于一个字符串上进行算术操作时,lua会尝试将这个数字字符串转换成一个数字;还有就是..表示字符串与字符串的连接,在c#中是用+来表示的。最后一点是用#来计算字符串的长度,放在字符串前面。
2.5table(表)
在lua中,table的创建是通过“构造表达式”来完成的,最简单构造表达式是{},用来创建一个空表。也可在表中添加一些数据,直接初始化表。也许大家对于表的定义还是不是那么明白,其实你可以将table理解成C#中的字典,都是有键值对的;注意一点如果表中没有键值对的话,你可以把它当作一个数组。
在图中我们可以看到使用键值对的方式与使用数组索引的方式都是可以得到值的,注意一点的是,在lua中的索引是从1开始的,这与c#中不一样,它是从0 开始的。
从图中我们可以知道lua中,如果你想给一个已经赋值的变量修改的话,直接重新赋值就行了,从图中可以看到从的索引可以是不连续的。
好了,今天的lua语法就到这里了,明天开始lua二。