目录

  • 饥荒的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

控制台命令作为字符串传入系统,要去调用对应的函数

使用Lua来实现控制台系统非常简单,类似于Lua的REPL,我们只需要把控制台暴露的Lua函数放在一个脚本里,预先加载它。之后控制台输入的串作为Lua代码运行,直接调用这些函数

所以你可以发现,饥荒的控制台可以调用print等Lua标准库函数,并不限于饥荒的控制台函数,因为这个控制台就是Lua的REPL+控制台脚本

饥荒的控制台

lua游戏脚本实例源码_Lua脚本引擎教程(六):饥荒Lua脚本系统相关推荐

  1. lua游戏脚本实例源码_Lua与其他宿主语言交互原理剖析

    Lua与其他宿主语言交互原理剖析 题外话:今天周末,刚好在家有时间就把我这次项目组内部分享的文章贴出来,分享给大家,同时也方便以后自己翻阅. 一. Lua简介 目标:Lua语言本身是用C语言来编写开发 ...

  2. lua游戏脚本实例源码_在nginx中使用强大的lua实现定向需求

    前言 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.其设计目的是为了嵌入应用程序中,从而为应用程序提供 ...

  3. lua游戏脚本实例源码_Redis Lua脚本中学教程(上)

    失踪人口回来啦! 有读者问我为什么这么久都没有出Redis Lua中学教程,表示村头厕所已经好久没有纸了.其实我早就要写这篇中学教程了,奈何最近太忙了,就一拖再拖,直到今天我终于又开始动笔了.忘记Lu ...

  4. 【140811】泡泡堂游戏单机版完整源码(ASL引擎)

    此源码模拟了盛大公司的同名游戏泡泡堂,演示了ASL引擎的使用方法.支持支持小龟.大物体.飞碟等坐骑.动画物体,猫头鹰,支持草丛.帐篷.冰窟等隐藏物体,支持各种主要道具. 本游戏可以实现单双人对战. 游 ...

  5. java课程设计纸牌游戏_java练习项目之纸牌游戏实例源码

    java应用练习项目之纸牌游戏实例源码.java纸牌项目练习题目要求: 定义纸牌的花色 定义纸牌的大小2A 花色与数字组成一张牌 组成一整副纸牌 构造玩家 发牌 题目 : 创建一副扑克牌,这副牌是标准 ...

  6. 小程序源码提取工具 完美解包,最新脚本,一键提取小程序源代码工具

    小程序源码提取工具 完美解包,最新脚本,一键提取小程序源代码工具 小程序解包工具,具体功能请百度一下,解码后直接换掉人家的地址就OK 那么如何才能在手机里找到小程序的源文件包呢? 具体目录位置直接给出 ...

  7. 雨松MOMO《Unity 3D游戏开发》源码公布

    原创文章如需转载请注明:转载自雨松MOMO程序研究院 本文链接地址:雨松MOMO<Unity 3D游戏开发>源码公布 下载源码时,首先大家请登陆图灵社区找到<Unity 3D游戏开发 ...

  8. mfc使用cef源代码实现_如何获得微信小游戏跳一跳源码以及源代码组合包括哪些...

    很多小游戏都是由源代码编写而成的,那大家知道源代码组合包括哪些吗?手机游戏源代码怎么使用的呢?还有,如何获得微信小游戏跳一跳源码?下面就由奇瑰网小编带大家来了解一下相关的内容吧. 源代码组合包括哪些 ...

  9. 如何拷贝工程_如何获得微信小游戏跳一跳源码以及源代码组合包括哪些

    很多小游戏都是由源代码编写而成的,那大家知道源代码组合包括哪些吗?手机游戏源代码怎么使用的呢?还有,如何获得微信小游戏跳一跳源码?下面就由奇瑰网小编带大家来了解一下相关的内容吧. 源代码组合包括哪些 ...

最新文章

  1. Linux下磁盘I/O测试
  2. shell脚本的执行方式及区别
  3. css 自动换行_前端必备!20个CSS小技巧
  4. 如何利用ZBrush中的DynaMesh创建身体(一)
  5. vuex modules ajax,VUE项目爬坑---6、vuex的真正存在的意义是什么
  6. Spring Cloud 未来发展方向
  7. cocos2d-x中使用Http
  8. 面向对象编程启思录——读《OOD启思录》有感
  9. 委托/事件/线程传参简单理解
  10. 教你写Linux设备驱动程序:一个简短的教程
  11. 温故而知新,可以为师矣
  12. 微信发红包如何设计测试用例
  13. 【RCV】接收单号丢失处理
  14. win10桌面计算机被删了,Win10回收站不小心清空了怎么办?如何恢复Win10被删除文件的方法...
  15. 打造高效研发团队 (4) —— 团队文化篇
  16. 第一周学习任务:百鸡问题扩展-N鸡问题
  17. 小型双轮差速底盘三灰度循迹功能的实现
  18. 如何做好技术晋升答辩
  19. 听我说北京之开篇寄语
  20. 不一样的联宇益通,不一样的SD-WAN+

热门文章

  1. Android插件化原理—ClassLoader加载机制
  2. Android系统信息获取 之九:TelephonyManager类
  3. Android Media Framework(1): 总纲
  4. 树莓派之Ubuntu安装远程桌面
  5. 巩固——React的详细安装教程
  6. 云计算学习笔记:什么是云?云计算是什么?
  7. mllib调参 spark_《Spark 官方文档》机器学习库(MLlib)指南
  8. Java爬虫 手机号段 归属地 处理后输出sql文件
  9. 微信小程序 事件传参
  10. springboot14 整合JDBC