热更新
学习Lua之前我们应该首先了解一下我们在游戏编程中使用Lua的目的:热更新。
热更新是一种手游及App常用的更新方式,举例来说,游戏上线后,玩家需要通过应用商店及其他渠道下载第一个版本。在运营的过程中,如游戏需要更换UI、修改逻辑、开放功能等,此时若不使用热更新技术,就需要重新打包,那么玩家也就需要通过应用商店或其他渠道重新下载游戏。 热更新可以在不重新下载客户端的情况下,更新游戏的内容。
在unity中,主要的热更新方式有如下三种:
1.使用Lua编写游戏逻辑;
Lua是一个小巧的脚本语言,由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。
使用lua热更新就是在Unity环境里内嵌一个lua虚拟机,经常变动的和对执行效率没要求的逻辑用Lua实现,游戏启动时加载服务器上最新的lua字节码来执行游戏。lua代码都是运行时才编译的,不运行的时候就如同一张图片、一段音频一样,都是文件资源;所以更新逻辑只需要更新脚本,不需要再编译,因而lua能轻松实现“热更新”。
2.C#Light
C#Light是一个简单的嵌入式脚本,模仿c#的语法风格,完全由pure c#写成
3.C#反射技术
可以将部分逻辑提取至一个单独的代码库工程中,打包为DLL,将DLL打包为AssetBundle,Unity程序动态加载AssetBundle中的DLL文件,使用反射机制来调用代码。用C#反射加载程序集的方式可以动态的从assetBundle资源包或其他资源包里加载脚本到工程中。但因为苹果官方禁止iOS下的程序热更新,JIT在iOS下无效,所以这种方式无法在ios使用
参考资料 https://zhuanlan.zhihu.com/p/42472089知乎 @朔宇
什么是Lua
- 一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
- 可以直接在应用程序内运行,运行时编译,因此我们可以在游戏启动时加载服务器上最新的lua字节码来执行游戏。
- 具体Lua的语法与安装可以在菜鸟教程-Lua里进行快速的入门。
相关的准备工作
- 编译器
网上看到的是大部分人使用emmylua,VS,SubLime,还有一些特殊的编译器。我在这里选择的VsCode+Lua插件+LuaT代码补全。
- 游戏内新建Lua脚本模板
可以参考这篇文章中的方法。http://www.xuanyusong.com/archives/3732 @雨松MOMO