【參考博文】河樂不爲-《Unity 3D遊戲客戶端基礎框架》tolua 框架接入
引言
如何將 tolua 框架接入 Unity 項目中,這裏假設我們已經有一個項目,並且已經實現了一些基礎架構或者項目已經是完整的,此時,如何將 tolua 這個熱更新框架接入進來而不影響原項目的結構?
tolua引入
- 資源下載:
既然要將 tolua 引入項目,第一步肯定是先到 tolua 的 github 資源庫 中下載 tolua 的資源包 - 資源引入:
將下載的資源解壓縮,可以看到大致的目錄結構如下:
tolua-master |-- Assets |-- Luajit |-- Luajit64 |-- ProjectSettings |-- Unity5.x
這麼多文件夾,那些纔是我們真正需要的,將 Assets 文件夾下面的所有文件都複製到我們項目的 Assets 目錄中,由於我使用的是 Unity 5.5.1f1 ,所以需要將 Unity5.x/Assets/Plugins 文件夾也複製到我們項目的 Assets 目錄中與進行替換合併。
3. 其他:
Unity 編輯器導入目錄下新增的資源後,會彈出一個窗口提示 “點擊確定自動生成常用類型註冊文件,也可通過菜單逐步完成此功能” ,這裏直接點擊 【確定】 即可。
lua 起點
在 ToLua\Examples 目錄中提供了很多實用範例,對於剛入門的新手有很大幫助,這裏就不一一贅述了,我們直接進入到正式項目的應用實踐中。在 Tolua\Misc 中提供了一個 LuaClient.cs ,這個就是 tolua 提供給我們一個封裝好的啓動接口,可以通過繼承此類來編寫我們項目的 tolua 管理器,這裏我創建一個 LuaEngine.cs ,繼承自 LuaClient 並重寫兩個接口:InitLoader 和 LoadLuaFiles :
using System.Collections; using System.Collections.Generic; using LuaInterface; using UnityEngine; /// <summary> /// tolua 啓動入口,將此腳本動態綁定到一個不銷燬的 GameObject 上,通常跟遊戲的 GameManagr 綁在同物體上 /// </summary> public class LuaEngine : LuaClient { protected override LuaFileUtils InitLoader() { return new LuaResLoader(); } /// <summary> /// 可添加或修改搜索 lua 文件的目錄 /// </summary> protected override void LoadLuaFiles() { #if UNITY_EDITOR // 添加編輯器環境下獲取 lua 腳本的路徑(Assets/lua) luaState.AddSearchPath(Application.dataPath + "/lua"); #endif OnLoadFinished(); } }
在遊戲控制中心腳本 GameManager (綁定在遊戲起始場景中的一個 GameObject 上面,通常是一個 Empty GameObject)的 Awake 方法中,通過以下方式啓動此腳本:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameManager : MonoBehaviour { private static GameManager _instance = null; private LuaEngine _luaEngine; public static GameManager Instance { get { return _instance; } } void Awake() { _instance = this; // 設置爲切換場景不被銷燬的屬性 GameObject.DontDestroyOnLoad(gameObject); Init(); } /// <summary> /// 遊戲管理器的初始化步驟 /// </summary> void Init() { _luaEngine = gameObject.AddComponent<LuaEngine>(); } }
執行啓動場景,可以看到最後輸出:
11:34:30.215-0: [Main.lua:3]:logic start UnityEngine.Debug:Log(Object)
這是 Assets/Lua/Main.lua 的打印內容,這個腳本也就是所有 lua 邏輯的起始點:
--主入口函數。從這裏開始lua邏輯 function Main() print("logic start") end --場景切換通知 function OnLevelWasLoaded(level) collectgarbage("collect") Time.timeSinceLevelLoad = 0 end
目錄結構優化
導入 tolua 的資源後,Assets 目錄下的資源會版的有點亂和雜,所以有必要根據項目原本的結構對 tolua 的一些目錄結構進行優化:
1.*Wrap.cs 目錄:
Assets/Source/Generate 是用來保存 tolua 生成的可供 lua 調用的 C# 類的綁定類,但是在我的項目中,習慣性把腳本放在 Assets/Scripts 目錄中,所以這裏我們只需要打開 Assets/Editor/Custom/CustomSettings.cs ,修改一下內容:
public static string saveDir = Application.dataPath + "/Scripts/Generate/";
在 Scripts 中創建一個 Generate 目錄,關閉 Unity 在重新啓動,會再像剛引入 tolua 那樣彈出一個窗口提示 “點擊確定自動生成常用類型註冊文件,也可通過菜單逐步完成此功能” ,這裏也是直接點擊 【確定】 即可。此時,在 Assets/Scripts/Generate 會生成一堆 *wrap.cs 的腳本文件,說明目錄修改成功。但是此時會有重名文件,必須把整個 Source 目錄刪掉。然後將 Source/LuaConst.cs 移動到 Assets/Scripts./..目錄中。
- ToLua 目錄:
Assets/ToLua 目錄下是 tolua 框架最爲核心的一些庫,當然按照我們項目的規則;外部引入的第三方插件資源主要放在 Assets/ThirdParty 目錄中,這裏我們我們直接將整個 ToLua 目錄移動到第三方插件目錄,然後需要修改幾個地方:
(1)LuaConst.cs 中的 toluaDir :
public static string toluaDir = Application.dataPath + "/ThirdParty/ToLua/Lua"; //tolua lua文件目錄
(2)CustomSettings.cs 中的 toluaBaseType :
public static string toluaBaseType = Application.dataPath + "/ThirdParty/ToLua/BaseType/";
完成上述兩項設置及完成了目錄的修改。
轉載地址:https://blog.csdn.net/ych1995612/article/details/79624665?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4.queryctr&spm=1001.2101.3001.4242.3&utm_relevant_index=7