原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1204/224.html
Unity3D热更新-LuaFramework
1、运行框架
1.下载LuaFramework,然后用Unity3D打开,打开之后需要点击lua菜单里面的Generate All和LuaFramework菜单里Build XXX Resources,以生成一些必要的文件
2.然后就可以运行起来了。
2、配置框架
1.找到LuaFramework\ConstDefine\AppConst.cs
自带服务器框架模式:
/// <summary>
/// 如果开启更新模式,前提必须启动框架自带服务器端。
/// 否则就需要自己将StreamingAssets里面的所有内容
/// 复制到自己的Webserver上面,并修改下面的WebUrl。
/// </summary>
public const bool UpdateMode = true; //更新模式-默认关闭
public const string WebUrl = "http://localhost:6688/"; //测试更新地址
下载 ServerFramework把StreamingAssets里面的所有内容复制到ServerFramework-master\Assets\StreamingAssets
//GameServer\service\HttpServer.cs
public HttpServer(int port) {
//服务器地址
host = "http://localhost:6688/";
}
找到:ServerFramework-master\Server\bin\Debug\SuperSocket.SocketService.exe 运行
好了,运行一下你的程序吧。在这里已经可以实现动态的更新了。
Web实现热更新
笔者使用iis开启本地服务器,然后将StreamingAssets里面的所有内容复制到服务器上面。必要时要配置一些权限,让所有文件都都可以下载。
locallhost/StreamingAssets/files.txt
/// <summary>
/// 否则就需要自己将StreamingAssets里面的所有内容
/// 复制到自己的Webserver上面,并修改下面的WebUrl。
/// </summary>
public const bool UpdateMode = true; //更新模式-默认关闭
//服务器地址填写一下就可以了。
public const string WebUrl = "http://localhost/StreamingAssets/"; //测试更新地址
3、运行Lua代码
现在不需要框架自带的示例了,需要删掉一些代码,使框架只运行我们编写的lua文件。打开Assets\LuaFramework\Scripts\Manager\GameManager.cs,将OnInitalize修改成下图这个样子。这是lua的入口,框架会调用Main.lua的Main方法。
void OnInitialize() {
LuaManager.InitStart();
//LuaManager.DoFile("Logic/Game"); //加载游戏
//LuaManager.DoFile("Logic/Network"); //加载网络
//NetManager.OnInit(); //初始化网络
//Util.CallMethod("Game", "OnInitOK"); //初始化完成
initialize = true;
4、编写Lua代码
打开Assets\LuaFramework\Lua\main.lua,编写lua代码。这里只添加一句“LuaFramework.Util.Log(“HelloWorld”);”(如下所示),它的功能相当于Debug.Log(“HelloWorld”)。
--主入口函数。从这里开始lua逻辑
--主入口函数。从这里开始lua逻辑
function Main()
LuaFramework.Util.Log("Hello World");
end
5、运行游戏
后面这个操作将不在提示,每次修改代码后自行执行这个操作
点击菜单栏中LuaFramework→Build Windows Resource,生成资源文件。然后运行游戏,即可在控制台中看到打印出的HelloWorld。
HelloWorld
游戏资源目录:里面包含Unity3D工程中StreamingAssets文件夹下的文件。安装游戏之后,这些文件将会被一字不差地复制到目标机器上的特定文件夹里,不同平台的文件夹不同,如下所示(上图以windows平台为例)
Mac OS或Windows:Application.dataPath + "/StreamingAssets";
IOS: Application.dataPath + "/Raw";
Android:jar:file://" + Application.dataPath + “!/assets/";
数据目录:由于“游戏资源目录”在Android和IOS上是只读的,不能把网上的下载的资源放到里面,所以需要建立一个“数据目录”,该目录可读可写。第一次开启游戏后,程序将“游戏资源目录”的内容复制到“数据目录中”(步骤1,这个步骤只会执行一次,下次再打开游戏就不复制了)。游戏过程中的资源加载,都是从“数据目录”中获取、解包(步骤3)。不同平台下,“数据目录”的地址也不同,LuaFramework的定义如下:
Android或IOS:Application.persistentDataPath + "/LuaFramework"
Mac OS或Windows:c:/LuaFramework/
调试模式下:Application.dataPath + “/StreamingAssets/"
注:”LuaFramework”和”StreamingAssets”由配置决定,这里取默认值
上篇:上一篇:NGUI研究院之为什么打开界面太慢
下篇:下一篇:unity简易小地图的实现(NGUI)