關於LUA+Unity開發_toLua篇【二】

這篇來講說github上的的toLua框架 LuaFramework。兩個版本分別對應UGUI和NGUI。這個框架是基於新一代toLua#的,toLua#的性能是強過uLua和早期的toLua,且自帶assetbundle機制,方便用戶開發。git

框架地址: https://github.com/jarjin/LuaFramework_UGUIgithub

在使用過程當中仍是得多看看官方給的文檔: http://doc.ulua.org/default.asp框架

 

整體來講有點繞,剛使用時因爲結構不清楚容易迷失。不過設計思想仍是很好的。在框架使用上,Main.lua作爲對於一個全局入口,而非單個遊戲的入口,個人作法的是將Controller,View寫好後,具有原生回調的Model層須要在C#實現而後直接進行橋接,固然這樣作的Model是沒法進行擴展的! 因此能夠採用將C#的各實體帶MonoBehavior的類以「固定形式」橋接到LUA中實現。函數

好比以下一種狀況,你們有什麼好辦法呢?性能

1.LUA實例兩個帶剛體帶碰撞的Cube測試

2.C#層實現一個碰撞檢測,得到回調OnCollisionEnter,將碰撞的對象(GameObject)傳給LUA。lua

3.在LUA中拿到此GameObject後,如何斷定是碰了1中的哪一個Cube呢?spa

 

 

個人方法:設計

1. 比較的謹慎的辦法, 爲Cube建立惟一的名字,取出來後經過名字斷定orm

2. 最直接的方法!! 直接比較GameObject,經不斷測試,徹底能夠。

方法2爲何可行,我以爲這是由於GameObject實際地址仍然是在C#,所以經過LUA的==(比較對象地址和值) 所得結果仍是咱們想要的。

 

另外,框架爲咱們提供了Event機制,這個機制是個廣播機制,全局全部AddEventListener此事件的回調函數都會被調用。 那麼若是隻想監聽某個lua類呢?能夠嘗試將某個元表實例出來的對象添加以下代碼:

function object:addEventListener(eventName, listener, target)
    print(eventName)
    eventName = string.upper(eventName)
    if object.listeners_[eventName] == nil then
        object.listeners_[eventName] = {}
    end

    local ttarget = type(target)
    if ttarget == "table" or ttarget == "userdata" then
        listener = handler(target, listener)
        -- tag = ""
    end

    object.listenerHandleIndex_ = object.listenerHandleIndex_ + 1
    local handle = string.format("HANDLE_%d", object.listenerHandleIndex_)
    object.listeners_[eventName][handle] = listener
    return handle
end

function object:dispatchEvent(event)
    event.name = string.upper(event.name)
    local eventName = event.name
    if object.listeners_[eventName] == nil then return end
    event.target = object
    for handle, listener in pairs(object.listeners_[eventName]) do
        local ret = listener(event, a)
        if ret == false then
            break
        elseif ret == "__REMOVE__" then
            object.listeners_[eventName][handle] = nil
        end
    end
end

這樣咱們就能夠指定一個調用者對象來監聽一個事件,算是對特殊需求的使用。

 

最後,結合總體來講toLua及Lua Framework框架,是目前快速開發以LUA爲主體語言的U3D項目的最佳選擇! 後續來聊聊XLUA。

相關文章
相關標籤/搜索