Unity热更新—— 初学Lua踩坑记录

以下内容适合有一定代码基础但对lua完全小白,第一次写lua代码的开发者。

背景

一直使用C#开发Unity项目,然而最近项目需求要热更新,解决方案就是逻辑使用Lua写,大佬已经搭好了框架,我们需要配合框架写功能。
框架使用的是LuaFramework,框架和搭建方法可自行百度,这里不过多描述。不同框架的实现原理大概一致,实现方法上有差异而已。
然后使用lua的过程中就产生一些问题。
这里的话只记录一些可能困扰到新手的问题,这些问题理顺了之后大概就能自己找其他问题了。语法什么的东西各种语言都相通的不做赘述。
另外可能对lua的有些概念描述的不太专业,可参照C#的概念理解一下,

问题1:第一步干嘛,怎么开始

对没吃过猪肉也没见过猪跑的开发这真是个问题。
所以,第一步,我们需要先配置一下写lua的环境。推荐用BabeLua For 2017。针对VS写lua的一个插件。
安装和你VS版本一致的版本即可。
然后,如何开始写呢。
需要在Unity的工程目录下。找到或者新建一个你们的lua工程目录。
如下图:选择并添加你们的项目路径
Unity热更新—— 初学Lua踩坑记录
只填写如图一个位置即可
Unity热更新—— 初学Lua踩坑记录然后新建lua脚本。
Unity热更新—— 初学Lua踩坑记录
以上是入门。现在我们已经可以开始写lua了。

代码部分问题总结。

问题1:我明明写了lua脚本却找不到,或者找不到某个lua脚本的方法,调用时显示nil或者不存在等等。

原因:脚本没有被require,或者脚本的require顺序错误。

require是什么我也没整太明白。我的理解是,require来加载,然后就得到了一个东西。这个东西内容就是模块中导出的所有东西,如函数和常量。在你这个东西没加载出来或者没加载的时候,就会出现以上报错。(哈哈,神仙描述)

问题2:用lua打印日志的时候报错或者报空等等。

原因:
1:lua里面字符串拼接用两个点 . . 来连接。不能用 + 拼接。(C#用惯了需要额外注意)
2:lua 打印日志里面不同类型的数据不能用两个点 . . 来连接。要用逗号 ,来隔开。

问题3:找得到lua脚本,调用不了lua方法。

原因:lua里面调用方法的的方式有两种,一种是通过点 . 直接点出方法。
一种是通过:来调用出方法。

对于Unity的话简单的来说就是static的方法可以通过点直接点出来,非静态的方法要通过:来调用。

问题3:我同一个脚本里定义的一个数据 ,在这个脚本里调用却有问题或为nil。
原因:可能与你定义数据的位置有关。把数据定义在调用位置上试试。

我测试定义一个local 的数据。然后放在调用方法体外的位置下面,显示为空值,但如果放在放调用方法体外的位置上面。输出正常。猜测和lua代码结构顺序有关。

以上问题,都只是提供解决问题的思路。
至于,C#和 lua 互調,不同框架里面对应的方式不同。可以通过框架Demo来看。

以上。