博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tolua unity 报错_关于LUA+Unity开发_toLua篇【二】
阅读量:6269 次
发布时间:2019-06-22

本文共 1843 字,大约阅读时间需要 6 分钟。

这篇来说说github上的的toLua框架 LuaFramework。两个版本分别对应UGUI和NGUI。这个框架是基于新一代toLua#的,toLua#的性能是强过uLua和早期的toLua,且自带assetbundle机制,方便用户开发。

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

在使用过程中还是得多看看官方给的文档: http://doc.ulua.org/default.asp

1a87a7876820ccabe60984351b488d2e.png

总体来说有点绕,刚使用时由于结构不清楚容易迷失。不过设计思想还是很好的。在框架使用上,Main.lua做为对于一个全局入口,而非单个游戏的入口,我的做法的是将Controller,View写好后,具备原生回调的Model层需要在C#实现然后直接进行桥接,当然这样做的Model是无法进行扩展的! 所以可以采用将C#的各实体带MonoBehavior的类以“固定形式”桥接到LUA中实现。

比如如下一种情况,大家有什么好办法呢?

1.LUA实例两个带刚体带碰撞的Cube

2.C#层实现一个碰撞检测,获得回调OnCollisionEnter,将碰撞的对象(GameObject)传给LUA。

3.在LUA中拿到此GameObject后,如何判定是碰了1中的哪个Cube呢?

我的方法:

1. 比较的谨慎的办法, 为Cube创建唯一的名字,取出来后通过名字判定

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。

转载地址:http://xtspa.baihongyu.com/

你可能感兴趣的文章
iOS播放短的音效
查看>>
[java] java 线程join方法详解
查看>>
JQuery datepicker 用法
查看>>
golang(2):beego 环境搭建
查看>>
天津政府应急系统之GIS一张图(arcgis api for flex)讲解(十)态势标绘模块
查看>>
程序员社交宝典
查看>>
ABP理论学习之MVC控制器(新增)
查看>>
Netty中的三种Reactor(反应堆)
查看>>
网页内容的html标签补全和过滤的两种方法
查看>>
前端源码安全
查看>>
【CodeForces 618B】Guess the Permutation
查看>>
【转】如何实现一个配置中心
查看>>
Docker —— 用于统一开发和部署的轻量级 Linux 容器【转】
查看>>
Threejs 官网 - Three.js 的图形用户界面工具(GUI Tools with Three.js)
查看>>
Atitit.Java exe bat 作为windows系统服务程序运行
查看>>
session的生命周期
查看>>
数据库的本质、概念及其应用实践(二)
查看>>
iOS开发多线程--(NSOperation/Queue)
查看>>
php的ajax简单实例
查看>>
maven常用构建命令
查看>>