开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:1575

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 4212|回复: 45

[碧俐千仞] Unity3D热更新LuaFramework入门实战(1)——代码热更新

[复制链接]  [移动端链接]
排名
14803
昨日变化
16

14

主题

92

帖子

454

积分

Rank: 9Rank: 9Rank: 9

UID
53741
好友
16
蛮牛币
1488
威望
0
注册时间
2014-11-6
在线时间
63 小时
最后登录
2017-2-21

专栏作家

发表于 2016-7-1 22:58:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 tyxxxx 于 2016-7-1 23:24 编辑

这些日子在找的现成框架,希望能给后续项目开发带来便利。找着找着,便关注到了LuaFramework,这是一套基于tolua的框架,可以实现热更新。然而相关的资料太少,磕磕碰碰的尝试之后,便有写一篇入门教程的想法。这套文章应该会有4篇左右,涉及LuaFramework的安装、代码热更新、资源热更新、lua文件的编写等几项内容。


知乎 @罗培羽



1、安装框架

只要在http://www.ulua.org/index.html下载LuaFramework,然后用Unity3D打开,这里用的是LuaFramework_UGUI-1.0.4.109版本以及Unity3D 5.2,其他版本理应相似。打开之后需要点击lua菜单里面的Generate All和LuaFramework菜单里Build XXX Resources,以生成一些必要的文件。
安装过程可以参见http://pan.baidu.com/s/1gd8fG4N里面的01_uLua_Windows.avi和02_SimpleFramework_UGUI_Windows.avi两个视频(如果在windows系统下)。框架结构请参见http://doc.ulua.org/article/ngui/simpleframework_base1.html,这里不再复述。

若运行后能够弹出示范界面,证明安装成功,可以进入下一步。
Unity3D热更新LuaFramework入门实战1661.png
成功运行示范界面(可要客户端能够运行起来就行)


​2、运行Lua代码


这一步的目标很简单,就是让框架运行我们自己写的lua代码,显示一句“helloWorld”。下一步再考虑代码的热更新问题

1)新建场景

在任意物体中添加Main组件。其实Main组件里面只是调用了AppFacade.Instance.StartUp(),这是框架的起点。框架将会自动完成资源加载、热更新等等事项。
Unity3D热更新LuaFramework入门实战1856.png
添加Main组件


2)删掉示例的调用

现在不需要框架自带的示例了,需要删掉一些代码,使框架只运行我们编写的lua文件。打开AssetsLuaFrameworkScriptsManagerGameManager.cs,将StartMain修改成下图这个样子。这是lua的入口,框架会调用Main.lua的Main方法。

Unity3D热更新LuaFramework入门实战11027.png

修改GameManager

3)编写lua代码

打开AssetsLuaFrameworkLuamain.lua,编写lua代码。这里只添加一句“LuaFramework.Util.Log("HelloWorld");”(如下所示),它的功能相当于Debug.Log("HelloWorld")。

[C#] 纯文本查看 复制代码
--主入口函数。从这里开始lua逻辑
function Main()
    LuaFramework.Util.Log("HelloWorld");
end


“LuaFramework.Util.Log("HelloWorld")”中的Util是c#里定义的类,供lua中调用。可以打开AssetsLuaFrameworkEditorCustomSettings.cs看到所有可以供lua调用的类,如下图是CustomSettings.cs的部分语句。
Unity3D热更新LuaFramework入门实战11404.png
CustomSettings.cs的部分语句
再由具体的类可以查找所有的API(参见下面两个图),如下图是Util类的部分语句。
Unity3D热更新LuaFramework入门实战11474.png
Util类(AssetsLuaFrameworkScriptsUtilityUtil.cs)的部分语句

4)运行游戏

点击菜单栏中LuaFramework→Build Windows Resource,生成资源文件。然后运行游戏,即可在控制台中看到打印出的HelloWorld。
Unity3D热更新LuaFramework入门实战11624.png
生成资源文件

Unity3D热更新LuaFramework入门实战11636.png
运行结果


Unity3D热更新LuaFramework入门实战11820.png
设置LuaBundleMode


3、热更新的原理


接下来便要尝试代码热更新,让程序下载服务器上的lua文件,然后运行它。在说明热更新之前,需要先看看Unity3D热更新的一般方法。如下图所示,Unity3D的热更新会涉及3个目录。

Unity3D热更新LuaFramework入门实战11945.png
热更新的过程

游戏资源目录:里面包含Unity3D工程中StreamingAssets文件夹下的文件。安装游戏之后,这些文件将会被一字不差地复制到目标机器上的特定文件夹里,不同平台的文件夹不同,如下所示(上图以windows平台为例)

[C#] 纯文本查看 复制代码
Mac OS或Windows:Application.dataPath + "/StreamingAssets";
IOS: Application.dataPath + "/Raw";Android:jar:file://" + Application.dataPath + "!/assets/";


数据目录:由于“游戏资源目录”在Android和IOS上是只读的,不能把网上的下载的资源放到里面,所以需要建立一个“数据目录”,该目录可读可写。第一次开启游戏后,程序将“游戏资源目录”的内容复制到“数据目录中”(步骤1,这个步骤只会执行一次,下次再打开游戏就不复制了)。游戏过程中的资源加载,都是从“数据目录”中获取、解包(步骤3)。不同平台下,“数据目录”的地址也不同,LuaFramework的定义如下:

[C#] 纯文本查看 复制代码
Android或IOS:Application.persistentDataPath + "/LuaFramework"    
Mac OS或Windows:c:/LuaFramework/
调试模式下:Application.dataPath + "/StreamingAssets/"

注:”LuaFramework”和”StreamingAssets”由配置决定,这里取默认值

网络资源地址:存放游戏资源的网址,游戏开启后,程序会从网络资源地址下载一些更新的文件到数据目录。
这些目录包含着不同版本的资源文件,以及用于版本控制的files.txt。Files.txt的内容如下图所示,里面存放着资源文件的名称和md5码。程序会先下载“网络资源地址”上的files.txt,然后与“数据目录”中文件的md5码做比较,更新有变化的文件(步骤2)。

Unity3D热更新LuaFramework入门实战12807.png
files.txt
LuaFramework的热更新代码定义在AssetsLuaFrameworkScriptsManagerGameManager.cs,真正用到项目时可能还需少许改动。


4、开始热更新代码吧!


那么开始测试热更新代码的功能吧!热更上述实现的“HelloWorld”。

1)修改配置

框架的默认配置是从本地加载文件,需要打开AppConst.cs将UpdateMode设置为true(才会执行步骤2),将LuaBundleMode设置为false,将WebUrl设置成服务器地址。如下图所示。


Unity3D热更新LuaFramework入门实战13069.png

AppConst的配置

2)配置“网络资源

笔者使用iis开启本地服务器,然后将StreamingAssets里面的所有内容复制到服务器上面。必要时要配置一些权限,让所有文件都都可以下载。
Unity3D热更新LuaFramework入门实战13169.png
通过网络访问文件

3)测试热更新

改一下Lua脚本(如将HelloWorld改为Hello Lpy2),点击Build Windows Resource,将“工程目录/StreamingAssets”里面的文件复制到服务器上。再将脚本改成其他内容,然后Build Windows Resource,覆盖掉本地资源。运行游戏,如果程序显示“Hello Lpy2”的代码,证明成功从网上拉取了文件。

Unity3D热更新LuaFramework入门实战13371.png
代码热更新
笔者也是刚刚接触LuaFramework,想看看该框架是否适用于团队接下来的项目。感谢ToLua和LuaFramework作者的无私奉献。下一节将会介绍使用LuaFramework做资源热更新的内容。谢谢支持。


最后是广告时间

笔者即将出版的一本Unity3D实战类书籍《Unity3D网络游戏实战》。该书通过一个完整的多人坦克对战实例,详细介绍网络游戏开发过程中涉及到的知识和技巧。书中还介绍了服务端框架、客户端网络模块、UI系统的架构等内容。相信透过本书,读者能够掌握Unity3D网络游戏开发的大部分知识,也能够从框架设计中了解商业游戏的设计思路,感谢大家支持。


c68f71105f840551e1adc70914fa6fb5_b.jpg
通过《Unity3D网络游戏实战》读者便可以学会制作这样的多人对战游戏











评分

参与人数 2鲜花 +40 收起 理由
一曲流心 + 20 很给力!
仅为年时 + 20 赞一个!

查看全部评分


回复

使用道具 举报

7日久生情
2760/5000
排名
100
昨日变化
1

12

主题

352

帖子

2760

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
1892
好友
1
蛮牛币
5132
威望
0
注册时间
2013-8-12
在线时间
598 小时
最后登录
2017-2-19

VIP社区QQ达人

发表于 2016-7-2 08:24:00 | 显示全部楼层
书啥时候上市啊?

回复

使用道具 举报

7日久生情
2569/5000
排名
97
昨日变化

4

主题

204

帖子

2569

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
3423
好友
3
蛮牛币
1260
威望
0
注册时间
2013-9-7
在线时间
616 小时
最后登录
2017-2-14

社区QQ达人

发表于 2016-7-2 20:55:20 | 显示全部楼层
那么在哪里才能买到呢!

回复 支持 反对

使用道具 举报

5熟悉之中
854/1000
排名
1824
昨日变化
4

2

主题

64

帖子

854

积分

Rank: 5Rank: 5

UID
66098
好友
1
蛮牛币
3703
威望
0
注册时间
2015-1-5
在线时间
274 小时
最后登录
2017-2-22
发表于 2016-7-3 23:22:52 | 显示全部楼层
感谢分享,非常棒!~请问书现在可以买吗?
[发帖际遇]: zhouhongbo 发帖时在路边捡到 2 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

排名
3147
昨日变化
4

17

主题

136

帖子

1079

积分

Rank: 9Rank: 9Rank: 9

UID
31880
好友
6
蛮牛币
2373
威望
0
注册时间
2014-6-30
在线时间
370 小时
最后登录
2017-2-22

专栏作家

QQ
发表于 2016-7-4 10:09:41 | 显示全部楼层
赞啊 刚下了LuaFramework 就看到这文章

回复 支持 反对

使用道具 举报

3偶尔光临
181/300
排名
6903
昨日变化
7

0

主题

42

帖子

181

积分

Rank: 3Rank: 3Rank: 3

UID
53479
好友
0
蛮牛币
569
威望
0
注册时间
2014-11-5
在线时间
28 小时
最后登录
2016-8-23
QQ
发表于 2016-7-4 15:09:17 | 显示全部楼层
支持支持!!!!!!!!

回复

使用道具 举报

排名
12737
昨日变化
10

1

主题

13

帖子

68

积分

Rank: 2Rank: 2

UID
107081
好友
0
蛮牛币
103
威望
0
注册时间
2015-6-9
在线时间
22 小时
最后登录
2016-8-29
发表于 2016-7-4 15:35:44 | 显示全部楼层
非常的有帮助,赞*32

回复 支持 反对

使用道具 举报

排名
14803
昨日变化
16

14

主题

92

帖子

454

积分

Rank: 9Rank: 9Rank: 9

UID
53741
好友
16
蛮牛币
1488
威望
0
注册时间
2014-11-6
在线时间
63 小时
最后登录
2017-2-21

专栏作家

 楼主| 发表于 2016-7-4 17:37:32 | 显示全部楼层
起航 发表于 2016-7-2 08:24
书啥时候上市啊?

书估计两个月后就能上市吧,现在是出版社在排版印刷的阶段,谢谢支持。

回复 支持 反对

使用道具 举报

排名
14803
昨日变化
16

14

主题

92

帖子

454

积分

Rank: 9Rank: 9Rank: 9

UID
53741
好友
16
蛮牛币
1488
威望
0
注册时间
2014-11-6
在线时间
63 小时
最后登录
2017-2-21

专栏作家

 楼主| 发表于 2016-7-4 17:37:38 | 显示全部楼层
起航 发表于 2016-7-2 08:24
书啥时候上市啊?

书估计两个月后就能上市吧,现在是出版社在排版印刷的阶段,谢谢支持。

回复 支持 反对

使用道具 举报

排名
14803
昨日变化
16

14

主题

92

帖子

454

积分

Rank: 9Rank: 9Rank: 9

UID
53741
好友
16
蛮牛币
1488
威望
0
注册时间
2014-11-6
在线时间
63 小时
最后登录
2017-2-21

专栏作家

 楼主| 发表于 2016-7-4 17:39:57 | 显示全部楼层
灰尘 发表于 2016-7-2 20:55
那么在哪里才能买到呢!

书估计两个月后就能上市吧,现在是出版社在排版印刷的阶段,到时候新华书店、淘宝、京东、亚马逊等等各个平台都能买到呢,谢谢支持。

回复 支持 反对

使用道具 举报

排名
14803
昨日变化
16

14

主题

92

帖子

454

积分

Rank: 9Rank: 9Rank: 9

UID
53741
好友
16
蛮牛币
1488
威望
0
注册时间
2014-11-6
在线时间
63 小时
最后登录
2017-2-21

专栏作家

 楼主| 发表于 2016-7-4 17:41:11 | 显示全部楼层
zhouhongbo 发表于 2016-7-3 23:22
感谢分享,非常棒!~请问书现在可以买吗?

书估计两个月后就能上市吧,现在在排版和印刷。感谢支持。

回复 支持 反对

使用道具 举报

排名
14803
昨日变化
16

14

主题

92

帖子

454

积分

Rank: 9Rank: 9Rank: 9

UID
53741
好友
16
蛮牛币
1488
威望
0
注册时间
2014-11-6
在线时间
63 小时
最后登录
2017-2-21

专栏作家

 楼主| 发表于 2016-7-4 17:41:18 | 显示全部楼层
zhouhongbo 发表于 2016-7-3 23:22
感谢分享,非常棒!~请问书现在可以买吗?

书估计两个月后就能上市吧,现在在排版和印刷。感谢支持。

回复 支持 反对

使用道具 举报

排名
2317
昨日变化
1

14

主题

98

帖子

1183

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
78629
好友
5
蛮牛币
517
威望
0
注册时间
2015-3-10
在线时间
399 小时
最后登录
2017-2-20

蛮牛译员

发表于 2016-8-3 09:14:02 | 显示全部楼层
还有一个月

回复

使用道具 举报

排名
43461
昨日变化
172

0

主题

4

帖子

7

积分

Rank: 1

UID
137688
好友
0
蛮牛币
29
威望
0
注册时间
2016-2-26
在线时间
3 小时
最后登录
2016-8-5
QQ
发表于 2016-8-3 12:06:07 | 显示全部楼层
XIEXIE分享!

回复

使用道具 举报

2初来乍到
130/150
排名
17514
昨日变化
16

0

主题

46

帖子

130

积分

Rank: 2Rank: 2

UID
156507
好友
0
蛮牛币
35
威望
0
注册时间
2016-7-15
在线时间
68 小时
最后登录
2017-2-16
发表于 2016-8-9 15:51:48 | 显示全部楼层
谢谢分享
[发帖际遇]: ccaadd 乐于助人,奖励 2 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表