UH2S1L8——表
UH2S1L8——表
注:
笔者学习这节课并记下本篇笔记时,使用的Lua是从github上下载的LuaforWindows,版本为Lua 5.1.5
本篇笔记中记录的所有奇怪的“特性”,都是基于该版本的Lua产生的,笔者将这些学习中遇到的情况忠实的记录了下来
笔者不保证非LuaforWindows的Lua或者更高版本的Lua也会出现这种问题,
如果没遇到本笔记中记录的奇怪特性,应该是Lua版本不一致导致的
表
表(table)是Lua中非常重要的复杂数据类型,在Lua中所有的复杂类型都是table
诸如数组,字典,甚至面向对象的类都需要通过它来实现
另外记住,Lua的索引从1开始!(反程序员.jpg)
本章代码关键字
1234567891011tableVar = {} --表的声明#tableVar --获取表长度,不准确tableVar[] --通过索引获取值table.remove() ...
UH2S1L7——函数
UH2S1L7——函数
函数
在Lua中,函数也是一种变量类型,而Lua的函数声明不需要指定返回值的类型
123function 函数名(参数列表) 函数代码块end
123函数名 = function(参数列表) 函数代码块end
要注意,由于Lua是解释型语言,解释器从上到下执行代码,因此调用函数不能在函数声明之前,否则会报错
无参无返回值
12345678910print("**********无参无返回值************")function F1() print("F1函数")endF1()F2 = function() print("F2函数")endF2()
123**********无参无返回值************F1函数F2函数
通过第二种写法可以发现,在Lua中函数是一种变量类型,用起来就像是C#中的委托那样
有参数
Lua的函数声明中,参数列表是不需要写清楚参数的类型的,
因此,调用函数时,可以传入各种类型的值
(当然内部的逻辑不一定能允许你瞎写,就像下面的函数传入nil ...
UH2S1L6——循环语句
UH2S1L6——循环语句
本章代码关键字
123while...do...end --这里的条件是循环条件,满足条件才进入代码块,执行完毕后再次进行比较repeat...until... --这里的条件是跳出条件,满足条件就跳出代码块,不满足条件就再执行一次代码块for...do...end --循环变量 = 起始值, 结束值, 步长(默认1)
while循环
while循环的结构如下:
12345while 循环条件表达式 do 当满足条件时就会执行该语句块的内容 ...... 当代码逻辑执行完,再次进行条件判断,符合条件就继续回到开头重新执行方法end
例子
12345num = 0while num < 5 do print(num) num = num + 1end
1234501234
repeat…until循环
有点类似于do...while循环,不管满不满足条件都会先执行一次循环体内的代码
区别是,until关键字后跟的是结束条件表达式,当满足条件时才跳出循环,否则继续循环
...
UH2S1L5——条件分支语句
UH2S1L5——条件分支语句
本章代码关键字
123if...then...end --单分支if...then...else...end --双分支if...then...elseif...then......else...end --多分支
单分支
不同语言的条件分支语句作用基本一致,无非关键字不同
在Lua中,单分支语句结构如下,条件表达式可以使用各种运算符,最终需要返回一个boolean类型的值:
123if 条件表达式 then 满足条件时执行的代码块end
例子:
12345a = 9-- 单分支 if...then...endif a > 5 then print("满足条件")end
1满足条件
双分支
在Lua中,双分支语句结构如下:
12345if 条件表达式 then 满足条件时执行的代码块else 不满足条件时执行的代码块end
例子:
1234567a = 9-- 双分支 if...then.. ...
UH2S1L4——运算符
UH2S1L4——运算符
算数运算符
在lua中有:+ - * / % ^这些算数运算符,用于数学运算
注意,lua没有自增自减++ --,也没有复合运算符+= -= ...,^符号在Lua中是幂运算符号,而非异或运算符!!!
同时,与C#不同,如果字符串是数字形式的,如"123",则在可以与number类型的数字进行算数运算符运算,字符串会自动转为number类型
两个数字形式的字符串使用算数运算符运算也是会和计算数字那样计算,这也是为什么字符串拼接会采用..这种符号的原因
1234567891011121314151617181920212223242526print("**********算数运算符************")-- + - * / % ^-- 没有自增自减-- 没有复合运算符a = 1b = 2print("加法运算:" .. a + b)print("字符串与数字加法运算:" .. "123.4" + 1) --如果字符串是数字形式的,则 ...
UH2S1L3——字符串操作
UH2S1L3——字符串操作
本章代码关键字
123456789101112131415161718#str --获取字符串长度"\n" --换行字符[[多行字符串]].. --字符串拼接string.format() --格式化字符串tostring() --其他类型转字符串string.upper() --小写转大写string.lower() --大写转小写string.reverse() --翻转字符串string.find() --字符串查找索引string.sub() --截取字符串string.rep() --重复拼接字符串string.gsub() --字符串替换string.byte() --字符转ASCII码string.char() --ASCII码转字符
字符串声明
123print(" ...
UH2S1L2——变量
UH2S1L2——变量
本章代码关键字
12345nil --空number --数字string --字符串boolean --布尔值type() --获取类型函数,返回字符串
关于变量声明
Lua的变量声明与C#不同,是不需要在变量前指定变量类型的
它会根据赋值的内容自动判断变量类型,这有点类似于C#中的var
1a = 123 --值得一提的是,这样声明出来的是全局变量,貌似在Lua的代码约定里,全局变量首字母要大写,不过学习阶段暂时无所谓这个
lua中使用没有声明过的变量,不会报错,默认值是****nil
12print("**********变量**********")print(b)
输出:
12**********变量**********nil
简单变量类型
Lua中的简单变量类型包括:nil、number、string、boolean
以后会学习的复杂数据类型包括:
函数 function
表 table
数据结构 userdat ...
UH2S1L1——基本语法
UH2S1L1——基本语法
本章代码关键字
1234567891011121314151617181920print() --控制台输出-- 单行注释--[[多行注释]]--[[第二种多行注释]]----[[第三种多行注释--]]
关于分号
与C#不同,在lua里不需要使用分号
控制台输出
可以传入多个参数,甚至是表,输出时会自动用制表符隔开这些值
1print("你好世界")
注释
使用--作为单行注释
1-- 单行注释
使用--[[...]]作为多行注释,这种注释还有多种变形
12345678910111213141516--[[多行注释]]--[[第二种多行注释]]----[[第三种多行注释--]]
UH2S1——Lua
UH2S1——Lua
Lua
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,
其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua 解释器很小,因此可以轻松嵌入到项目内,
又因为解释性语言只需要替换脚本文件即可改变逻辑,因此 Lua 是早期热更新技术的不二之选
Lua 是 Lua 相关热更新方案的前置内容,唯有掌握 Lua 语法才能使用 Lua 相关的热更新方案
本系列学习内容
基本语法
变量
字符串操作
运算符
条件分支语句
循环语句
函数(变长,嵌套闭包,多返回值)
表(实现数组,字典,类,可以遍历)
多Lua脚本执行
特殊用法(多变量赋值、三目运算符)
协同程序
元表(__index, tostring, newindex)
Lua面向对象
自带库
垃圾回收
Lua的环境搭建
在Windows电脑上,直接在Github上下载LuaforWindows的安装包并安装即可,与课程不同,笔者会直接使用VSCode来进行Lua语法的学习
VSCode摆烂配置Lua
如果仅仅是学习语法,你可以摆烂选择安装Code Runner插 ...
UH1L4——AB包资源管理器
UH1L4——AB包资源管理器
前置知识:字典,协程,单例模式,AB包相关API,委托,lambda表达式
AB包资源管理器要做的工作
封装AssetBundle的一系列方法,在管理器内部实现加载主包,加载依赖,加载AB包,加载资源的逻辑
对外提供直接同步和异步加载AB包内资源的接口,以及卸载AB包的接口,减少外部加载资源的代码量
继承单例模式基类
这里让ABManager继承了单例模式基类SingletonAutoMonoBehaviour<T>,作为单例模式管理器使用
基础成员与属性
每个项目都需要加载其主包以获取依赖信息,因此需要单独的mainAB和manifest字段装载主包及其依赖配置信息
为了防止AB包重复加载,这里以包名为键,AB包为值,将加载出来的AB包存储起来,当重新需要该AB包时就直接通过字典获取
将AB包存放路径直接封装为属性,供内部直接调用,这样当AB包存储位置发生改变时,直接修改该属性返回的值即可
将主包名字直接封装为属性,供内部直接调用,可以使用#if来处理不同平台下返回的不同主包
12345678910111213141516171 ...