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”由配置決定,這裡取預設值