Unity3D热更新-LuaFramework
发表于2018-09-04
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”由配置决定,这里取默认值
来自:https://blog.csdn.net/u013108312/article/details/53924608
Unity3D热更新之LuaFramework系列