lua游戏脚本实例源码_Lua脚本引擎教程(六):饥荒Lua脚本
系统
⽬录
饥荒的Lua逻辑层架构
迁移到Unity中使⽤Lua
Lua擅长什么?
饥荒的Lua逻辑层架构
饥荒的整个逻辑层都是⽤Lua写的,并且把代码和艺术资产都开放给玩家,主要是供玩家中的mod制作者学习和开发mod
游戏从steam下载下来后,到steamapp⽬录中可以到游戏项⽬
饥荒的⽬录分为两部分,引擎还有⼀些底层内容被打包在bin,剩下的基本上是玩家可以直接获取的资产
scripts⽬录存放了⼤部分Lua脚本
饥荒的⽬录结构
js脚本开发
逻辑层的核⼼功能如下
游戏对象系统
动画⽤状态机管理
AI⽤⾏为树
UI控件都是Widget的⼦类
饥荒逻辑层核⼼类
迁移:如何在Unity中使⽤Lua开发?
原型开发⽅法是指,先⽤Lua或者Python语⾔快速开发系统的demo,再使⽤⽬标语⾔正式开发
把Lua接⼊Unity需要对Lua的C API有⼀定了解,这⾥以使⽤XLua为例
使⽤XLua接⼊Lua后,可以写⼀个LuaBehavior.cs作为中介
这个脚本的写法在XLua的examples⾥有⼀个基本的例⼦
⼤致的原理就是LuaBehavior连接⼀个Lua脚本,并获取Lua脚本中的全局函数,Start,Update等等,在LuaBehavior的Start和Update 中调⽤
因为Lua可以调⽤C#的所有函数,基本上能做到和C#功能等价
接下来,⽤C#怎么开发,⽤Lua也怎么开发,然后多利⽤Lua的hotreload特性快速迭代
Lua擅长什么?
Unity已经有C#了,Lua必须有⾃⼰的长处,才有使⽤的必要
数据驱动设计
json的全称是js object notation
json读取到js中就是js的对象
Lua和js很像,这么做,可以做到数据定义和使⽤数据的逻辑有⾼度的兼容性
细节略
反射和元编程
这⾥以饥荒的控制台的实现为例
控制台系统本质上是需要反射实现的
c_give
控制台命令作为字符串传⼊系统,要去调⽤对应的函数
使⽤Lua来实现控制台系统⾮常简单,类似于Lua的REPL,我们只需要把控制台暴露的Lua函数放在⼀个脚本⾥,预先加载它。之后控制台输⼊的串作为Lua代码运⾏,直接调⽤这些函数
所以你可以发现,饥荒的控制台可以调⽤print等Lua标准库函数,并不限于饥荒的控制台函数,因为这个控制台就是Lua的REPL+控制台脚本
饥荒的控制台