最近关于Lua的学习篇总结(一)

2k 词
Contents
	</div>
	
	<h1 id="1-Lua在游戏的作用"><a href="#1-Lua在游戏的作用" class="headerlink" title="1.Lua在游戏的作用"></a>1.Lua在游戏的作用</h1><h2 id="小注意:由于我是最近新找到了一家收我的公司(刚毕业)公司是拿lua去做的游戏UI框架。所以就是在看关于lua的NGUI方面的学习,可能自我水平十分有限,所以只是个人的总结而已"><a href="#小注意:由于我是最近新找到了一家收我的公司(刚毕业)公司是拿lua去做的游戏UI框架。所以就是在看关于lua的NGUI方面的学习,可能自我水平十分有限,所以只是个人的总结而已" class="headerlink" title="小注意:由于我是最近新找到了一家收我的公司(刚毕业)公司是拿lua去做的游戏UI框架。所以就是在看关于lua的NGUI方面的学习,可能自我水平十分有限,所以只是个人的总结而已"></a>小注意:由于我是最近新找到了一家收我的公司(刚毕业)公司是拿lua去做的游戏UI框架。所以就是在看关于lua的NGUI方面的学习,可能自我水平十分有限,所以只是个人的总结而已</h2><p>在游戏中,lua可以用来完成下面这些工作:</p>
编辑游戏的用户界面
定义、存储和管理基础游戏数据
管理实时游戏事件
创建和维护开发者友好的游戏存储和载入系统
编写游戏游戏的人工智能系统
创建功能原型,可以之后用高性能语言移植

(上述实际上是我看过的一本关于lua游戏开发的书(但是我的确并不是用C/C++进行开发的,所以从第六章之后也就没有往后面看,我只是一个想快速熟悉项目,快速上手的小新人而已))
所以事实上,在我们公司项目中,我们应该主要是进行前三点的处理

2关于Unity3D的热更新技术

2.1什么是热更新

热更新据我个人理解,就是在线下载一个小包,进行更新,类似于王者荣耀在刚开始的时候偶尔会让用户下载一个10m的小包,进行页面的一些活动的改变而已,实际上游戏的逻辑,页面上并没有一些大的变动。所以这个多用于手游中。

2.2为什么使用lua

杀鸡焉用宰牛刀。C#是一门编程语言,如果使用这个的话,需要重新打包,重新让用户进行更新下载,用户体验会比较糟糕。

2.3实现方式

1,使用Lua脚本编写游戏的UI或者其他的逻辑
2,使用C#Light
3,使用C#反射技术
但是由于在大多数的游戏公司里,后面两者十分麻烦,所以直接被果断放弃,所以用lua反而成为游戏公司的一个很重要的手段

2.4U3D提供的帮助

2.4.1AssetBundle

AssetBundles 是有 Unity 编辑器在编辑环境中(enit-time)创建的一些列的文件,这些文件可以被用在项目的运行环境中(run-time)。 AssetBundles 可以包括的资源文件有模型文件(models)、材质(materials)、纹理(textures)和场景(scenes)。AssetBundles 不能包含脚本文件。具体来说,一个 AssetBundle 就是把一系列的资源文件或者场景文件以某种方式紧密保存的一个文件。这个 AssetBundle 文件可以被单独加载到可执行的应用程序中。AssetBundles 可以由被 Unity 构建的游戏或者应用按需加载使用。这允许对像模型、纹理、音频、甚至是整个的游戏场景这样的资源进行流式加载和异步加载。AssetBundles 可以预缓存(pre-cached)和存储在本地,这样在运行时就可以立即加载它们。但是 AssetBundles 技术的主要的目的是在需要的时候能够从远端的服务器上按需请求特定的资源,并加载到游戏中。AssetBundles 可以包含 Unity 可以识别的任何类型的资源,包括自定义的二进制数据。唯一的例外是,脚本资源是不被允许的。

2.4.2使用AssetBundle实现资源热更的流程

a. 打包AssetBundle。

b. 上传到服务器server。

c. 运行游戏时候自动判断版本号,如果不同就从服务器上下载新的AssetBundle包替换本地AB包。

d. 解析加载AssetBundle.完成资源热更。

2.5利用Lua的热更新

在移动端可以编写Lua的解析器,通过这个解析器,可以运行最新的Lua脚本,然后我们把控制游戏逻辑的代码都写成Lua脚本。
以上
参考于http://blog.csdn.net/y1196645376/article/details/52556938
和siki的热更新课程