UH2S2L8——表映射到类
UH2S2L8——表映射到类
表映射类
如果我们要将Lua中的表映射到C#中的类对象中,就声明一个对应的自定义类
其中的成员变量命名要和Lua中表的自定义索引一致
但是它可少可多,无非就是忽略
值拷贝 改变实例化对象中的值 不会影响我们Lua中的表
支持嵌套
先在Lua脚本声明如下内容
123456789TestClass = { testInt = 2, testBool = true, testFloat = 1.2, testString = "123", testFun = function() print("123123123") end} -- 用表模拟的类
再在C#脚本中声明对应的类
注意!在这个类中去声明成员变量的名字一定要和Lua脚本那边的一样,且成员变量必须是公共的, 私有和保护变量没办法赋值
这个自定义类中的变量可以更多也可以更少,如果成员变量比lua中的少,就会忽略它 ...
UH2S2L7——表映射到List和Dictionary
UH2S2L7——表映射到List和Dictionary
List
一般用来映射没有自定义索引的表
确定类型,指定类型即可
不确定类型,用object
Dictionary
一般用来映射有自定义索引的表
确定类型,指定类型即可
不确定类型,用object
他们都是值拷贝 改变他们 不会影响lua中的表
表映射List
List一般用来映射没有自定义索引的表,确定类型就指定类型,若不确定类型就用object
先在Lua脚本声明如下内容
123--ListTestList = {1, 2, 3, 4, 5, 6} -- 相同类型列表TestList2 = {"123", "123", true, 1, 1.2} -- 不定类型列表
固定类型的列表,可以直接如调用全局变量那样获取它
12345678910void Start(){ LuaManager.Instance.Init(); LuaManager.Inst ...
UH2S2L6——全局函数获取
UH2S2L6——全局函数获取
本章代码关键字
1234[CSharpCallLua] //使委托可以接收Lua方法的特性,添加特性后需要使用Generate CodeLuaFunction //xLua提供的委托,可以接收各种类型的Lua全局函数,建议少用,因为会产生垃圾luaFunction.Call() //执行委托,需要传入参数,会返回object数组luaFunction.Dispose() //销毁luaFunction,若不销毁,则将一直占用内存!
全局函数的获取
无参无返回
自定义委托
Action
UnityAction
LuaFunction
有参有返回
自定义委托
Func
LuaFunction
多返回
自定义委托
Out
Ref
LuaFunction
变长参数
自定义委托
LuaFunction
先在Lua声明不同的函数(无参无返回,有参有返回,多返回值,变长参数)
1234567891011121314151617181920TestFu ...
UH2S2L5——全局变量获取
UH2S2L5——全局变量获取
本章代码关键字
123luaEnv.Global //获取_G表,通过它可以调用Lua脚本中的全局变量luaEnv.Global.Get<>() //获取全局变量luaEnv.Global.Set<>() //修改全局变量
xLua内的多脚本执行
由xLua的Lua解析器执行Lua脚本时,即使是在Lua脚本里遇到require语句,也是由xLua帮我们处理
只要是执行lua脚本,xLua都会自动的进入我们的重定向函数中查找文件
出于这个原因,我们完全可以在Unity里只执行一个入口Main脚本,剩下的脚本启动都在Lua脚本里执行
1234567891011using UnityEngine;public class L3_LuaMgr : MonoBehaviour{ void Start() { LuaManager.Instance.Init(); LuaManager.Instance.DoLuaFile( ...
UH2S2L4——Lua解析器管理器
UH2S2L4——Lua解析器管理器
Lua解析器管理器要做的工作
封装管理唯一的Lua解析器,对外开放调用Lua解析器接口,实现自定义加载脚本规则,实现直接执行lua脚本的方法
继承单例模式基类
这里让ABManager继承了单例模式基类BaseManager<T>,作为单例模式管理器使用
基础成员与属性、初始化方法
由于Lua解析器一般是唯一的,因此使用一个私有成员变量luaEnv来管理这个唯一的Lua解析器
因为以后外部会经常调用Lua解析器的_G表,因此使用开放只读属性Global使外部可以方便的调用
初始化方法会在解析器为空时实例化解析器,并将自定义加载脚本的方法添加到解析器里
123456789101112131415161718192021222324private LuaEnv luaEnv;public LuaTable Global{ get { if (luaEnv == null) { Debug.LogError("Lua解析器未初始 ...
UH2S2L3——Lua文件加载重定向
UH2S2L3——Lua文件加载重定向
本章代码关键字
1luaEnv.AddLoader() //添加加载Lua文件函数的方法,要求函数参数接收传入到require语句的字符串,返回脚本文件的byte数组
文件加载重定向
xlua提供了一个路径重定向的方法luaEnv.AddLoader(),允许我们自定义加载Lua文件的规则
当我们执行Lua语言require时,相当于执行一个lua脚本,它就会自动执行我们自定义传入的这个函数
首先需要观察该方法的实现
LuaEnv.cs
123456789101112//...public delegate byte[] CustomLoader(ref string filepath);internal List<CustomLoader> customLoaders = new List<CustomLoader>();//loader : CustomLoader, filepath参数:(ref类型)输入是require的参数,如果需要支持调试,需要输出真实路径。// ...
UH2S2L2——Lua解析器
UH2S2L2——Lua解析器
Lua解析器
本章代码关键字
123LuaEnv //Lua解析器类,new它即可创建一个可以执行Lua语句的Lua解释器luaEnv.DoString() //传入Lua语句字符串,执行Lua语句luaEnv.Tick() //帮助我们清除Lua中我们没有手动释放的对象,执行垃圾回收
Lua解析器能够让我们在Unity中执行Lua,一般情况下保持它的唯一性
使用它需要导入命名空间XLua
12345678910using UnityEngine;using XLua;public class L1_LuaEnv : MonoBehaviour{ void Start() { LuaEnv luaEnv = new LuaEnv(); }}
执行Lua语言
将Lua语句字符串传入方法内,即可让Lua解析器执行这句语句
还可以传入第二个字符串参数,当Lua解析器执行该语句报错时就可以输出第二个参数的内容
1luaEnv.DoStrin ...
UH2S2L1——xLua框架导入和AB包相关准备
UH2S2L1——xLua框架导入和AB包相关准备
xLua下载与导入
xLua已开源到GitHub。其git地址是:https://github.com/Tencent/xLua,下载源代码的ZIP包即可
下载解压后将Assets文件夹下的两个文件夹Plugins和XLua导入到项目内
AB包的导入
导入AssetBundles-Browser-master,详见UH1L1——AB包资源打包
其他需要导入的
导入小框架的单例模式基类(导入其他内容会很可能导致xLua脚本报错!)
导入AssetBundle课上写好的资源管理器,代码详见UH1L4——AB包资源管理器
工具栏添加的内容
工具栏添加了XLua选项,其中包括Generate Code和Clear Generate Code
初次导入我们最好先Clear Generate Code,再Generate Code
当AB包打包报错时我们可能需要Clear Generate Code
UFW——程序框架相关笔记
UFW——程序框架相关笔记
游戏框架
游戏框架通常是一种为游戏开发提供基本结构和通用功能的软件架构,以帮助游戏开发者更容易的构建、拓展和维护游戏项目。
游戏框架通常提供一系列的工具和规范,用于处理游戏开发中的常见问题。
一般情况下,游戏框架中会包含各种代码模块,每个代码模块都用于处理游戏当中对应的一些功能
主要就是帮助我们实现一些常用内容,设定一些开发规则,提升我们的开发效率。
一般的游戏框架当中会包含且不限于:
资源管理、场景管理、输入管理、音频管理、网络模块、存储和持久化、物理引擎集成、日志调试工具等等
不同的游戏框架可能有不同的组件和设计理念,并且不同的游戏框架可能会针对不同的游戏类型和开发流程进行优化。
我们甚至可以认为Unity引擎中提供好的各种功能,比如输入系统、物理系统、UI系统等等都属于Unity引擎框架的一部分。
这些系统的主要作用其实就是提升开发效率,让我们更轻松的制作游戏功能。
目前学习的相关课程
Unity程序基础小框架
旧版小框架
Unity的MVC思想
ZMUI —— UGUI框架
游戏框架是基于什么进行设计的
设计时考虑的因素
游 ...
UD——Unity数据持久化笔记
UD——Unity数据持久化笔记
数据持久化
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称
简单来说就是:将游戏数据存储到硬盘,硬盘中数据读取到游戏中,也就是传统意义上的存盘
当游戏运行结束后,其占用的内存将被释放,内存中的数据会消失,因此我们必须要将数据保存到硬盘上,才能长久保存数据
笔记代号UD——即Unity Data的缩写
本笔记包括以下系列
PlayerPrefs
XML
JSON
二进制