关于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。

相关文章
相关标签/搜索