1. 程式人生 > >1.Unity3D熱更新-LuaFramework

1.Unity3D熱更新-LuaFramework

1.執行框架

1.只要在https://github.com/jarjin (這個網址國內可能無法訪問)下載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/"; //測試更新地址

https://github.com/jarjin (這個網址國內可能無法訪問)下載 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”由配置決定,這裡取預設值