Unity的學習筆記(XLua的初學用法並在lua中使用unity周期函數)


自己最近也在研究怎么用lua控制UI,然后看着網上介紹,決定選用XLua,畢竟TX爸爸出的,有人維護,自己琢磨着怎么用,於是弄出來一個能用的作為記錄。

當然,XLua主要是用於熱更新,我自己是拿來嘗試用一下看看怎么和C#交互進行的。

然后是XLua的下載地址:https://github.com/Tencent/xLua

下載完了之后,把Assect文件夾下的東西放在工程里面,引入命名空間XLua就可以使用了。

using System.IO;  //引入這個空間是為了輸入路徑用
using UnityEngine;
using XLua;   //首先引入Xlua的命名空間

public class CSToLua : MonoBehaviour {

    // Use this for initialization
    void Start () {
        LuaEnv lua = new LuaEnv();           //首先必須要做這一步,類似new一個類的用法,只是這個換成了Lua
        lua.AddLoader(CustomLoader);         //這個是將一個自定義載入的路徑給Lua,這樣就能在這個自定義路徑進行查找
        lua.DoString("require 'MainLua'");   //這是載入一個名字為MainLua的lua腳本
    }
    
    // Update is called once per frame
    void Update () {
        
    }

    private byte[] CustomLoader(ref string filepath)      //這個是在網上查的,可以記下來作為一個API來使用,這個函數返回一個自定義路徑
    {
        //重定向  可以在AB包里去讀取 也可以指定 本地的一個路徑
        string str = Application.dataPath + "/Lua/" + filepath + ".lua";
        Debug.Log(str);
        if( File.Exists(str))
            return File.ReadAllBytes(str);
        return null;
    }
}

這樣執行了之后,那么Luau中又是怎么執行的呢?而且unity中,又update這樣的生命周期函數,這些函數應該怎么用呢?接下來實現一下

首先,我們要在Unity中,建立一個委托,用來讓Update來不停執行它

using UnityEngine;

public delegate void LuaUpdate();

public class LuaBehaviour : MonoBehaviour {

    public LuaUpdate luaUpdate;

    void Start () {
    }

 // 將LuaUpdate委托放在Update周期函數里面一直執行
    void Update () {          
        if (luaUpdate != null)
            luaUpdate();    

    }
}

之后我們就是要用lua去找到這個掛載的代碼,然后在lua中將需要反復執行的函數加入到LuaUpdate委托里面

--我把Lua掛載到ToLuaVoid這個物體上面的,所以先查找這個gameobject,用unity的時候,需要CS.(API所在的命名空間).Api
--至於什么時候用 ".",什么時候用":",我查過關系到是否傳入self,不過自己還沒理解,都是錯了后改,改着改着知道這里用什么符號。。(大家查下其他資料吧)
luaBehaviour = CS.UnityEngine.GameObject.Find("ToLuaVoid"):GetComponent(typeof(CS.LuaBehaviour))  -- 這里獲取組件,要用typeof(類型),因為lua中沒有c# <T>這種泛型用法
local timeCount = 0

local function UpdataLua()
    timeCount = timeCount + CS.UnityEngine.Time.deltaTime
    print(timeCount)
end

luaBehaviour.luaUpdate = UpdataLua   -- 將Lua中的函數加入到這個委托里面(第一次只能用 = ,不能 +=,因為會報空,但是在C#中,第一次使用就可以+=

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM