(轉)【Unity技術摘錄】tolua框架接入

【參考博文】河樂不爲-《Unity 3D遊戲客戶端基礎框架》tolua 框架接入

 

引言

如何將 tolua 框架接入 Unity 項目中,這裏假設我們已經有一個項目,並且已經實現了一些基礎架構或者項目已經是完整的,此時,如何將 tolua 這個熱更新框架接入進來而不影響原項目的結構?

 

tolua引入

    1. 資源下載: 
      既然要將 tolua 引入項目,第一步肯定是先到 tolua 的 github 資源庫 中下載 tolua 的資源包
    2. 資源引入: 
      將下載的資源解壓縮,可以看到大致的目錄結構如下:
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./..目錄中。

    1. 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章