(图源siki学院-狸墨老师)
什么是Lua
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。可以方便的与c/c++进行相互调用。但是Unity中主要是用c#进行开发的,因此在Unity中使用Lua通常有以下两种方案:
- 使用c#实现一个lua虚拟机
- 基于原生的c lua api做一个封装,让c#调用
为什么要使用Lua
1.轻量级:Lua用标准C语言编写并以源代码形式开发,编译后仅仅一百余千字节,可以很方便的嵌入到其他程序中。
2.可扩展:Lua提供非常丰富易于使用的扩展接口和机制,由宿主语言(通常是C或C++)提供功能,Lua可以使用它们,就像内置的功能一样。
3.方便做功能的热更新。 4.Lua语言的深度和广度都不大,易学易用,可以降低项目成本。
Unity 中使用 Lua 的优劣
优:
热更新分为2部分:代码热更新与资源热更新。热更新的好处更多在于手游,比如每逢节假日游戏做活动、游戏程序员们需要修改活动代码,如果没有热更新,就需要用户在每一次版本大变动时重新安装游戏,这样会造成大量的用户流失。
劣:
- 执行效率低:Unity中使用Lua,一个问题是Lua作为脚本语言本身执行的效率较低,另外还由宿主语言C#来调用,这个过程进一步降低了效率。所以游戏开发前要有规划,一般来说执行频繁、改动少、性能影响大的逻辑(如地图中人物移动、摇杆操作)适合放在C#中,反之则适合放在Lua中。
- 开发效率不如c#:C# 作为强类型语言和 Unity 官方的脚本语言,有 VS 这样方便的开发工具,错误检查和代码补全功能也非常完善。Lua 作为动态脚本语言,缺少类型声明,无论是阅读别人代码还是出错调试都不容易。断点调试也比较困难。
Unity 项目中怎样正确的使用 Lua
1、lua初学者或不熟悉的同学可以看下这三个免费教程:
AssetBundle(创建打包)入门学习(基于Unity2017
(AssetBundle(创建打包)入门学习(基于Unity2017))
Lua编程
(Lua编程)
C#与Lua语言基础—零基础入门
(《C#与Lua语言基础—零基础入门》部分目录)
2、unity中使用Lua
(图源siki学院-狸墨老师)
- 尽可能不要过度使用c#回调lua(同样也不要过度使用C#来调用Lua)
- 优先使用static函数导出,减少使用成员方法导出
- lua和c#之间传参、返回时,尽可能不要传递以下类型:
- 严重类: Vector3/Quaternion等unity值类型,数组
- 次严重类:bool string 各种object
- 建议传递:int float double
- 尽可能不要将复杂的算法放Lua层,Lua与资源分离
- 优先使用static函数导出,减少使用成员方法导出
- 考虑在lua中只使用自己管理的id,而不直接引用c#的object
- 合理利用out关键字返回复杂的返回值