• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

Unity3D热更新-LuaFramework

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1204/224.html

Unity3D热更新-LuaFramework

 

1、运行框架

 

1.下载LuaFramework,然后用Unity3D打开,打开之后需要点击lua菜单里面的Generate AllLuaFramework菜单里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/";    //测试更新地址

下载 ServerFrameworkStreamingAssets里面的所有内容复制到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.luaMain方法。

 

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、运行游戏

 

后面这个操作将不在提示,每次修改代码后自行执行这个操作

点击菜单栏中LuaFrameworkBuild Windows Resource,生成资源文件。然后运行游戏,即可在控制台中看到打印出的HelloWorld

 

HelloWorld

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

Mac OSWindowsApplication.dataPath + "/StreamingAssets";

IOS Application.dataPath + "/Raw";

Androidjar:file://" + Application.dataPath + “!/assets/";

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

AndroidIOSApplication.persistentDataPath + "/LuaFramework"    

Mac OSWindowsc:/LuaFramework/

调试模式下:Application.dataPath + “/StreamingAssets/"

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



上篇:上一篇:NGUI研究院之为什么打开界面太慢
下篇:下一篇:unity简易小地图的实现(NGUI)