找回密码
 立即注册
查看: 268|回复: 0

Lua脚本引擎教程(六):饥荒Lua脚本系统

[复制链接]
发表于 2022-5-1 16:22 | 显示全部楼层 |阅读模式
目录


  • 饥荒的Lua逻辑层架构
  • 迁移到Unity中使用Lua
  • Lua擅长什么?
饥荒的Lua逻辑层架构

饥荒的整个逻辑层都是用Lua写的,并且把代码和艺术资产都开放给玩家,主要是供玩家中的mod制作者学习和开发mod
游戏从steam下载下来后,到steamapp目录中可以找到游戏项目
饥荒的目录分为两部分,引擎还有一些底层内容被打包在bin,剩下的基本上是玩家可以直接获取的资产
scripts目录存放了大部分Lua脚本



饥荒的目录结构

逻辑层的核心功能如下

  • 游戏对象系统
  • 动画用状态机管理
  • 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("meat")控制台命令作为字符串传入系统,要去调用对应的函数
使用Lua来实现控制台系统非常简单,类似于Lua的REPL,我们只需要把控制台暴露的Lua函数放在一个脚本里,预先加载它。之后控制台输入的串作为Lua代码运行,直接调用这些函数
所以你可以发现,饥荒的控制台可以调用print等Lua标准库函数,并不限于饥荒的控制台函数,因为这个控制台就是Lua的REPL+控制台脚本



饥荒的控制台

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-3 16:28 , Processed in 0.136223 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表