关于LUA+Unity开发_toLua篇【二】
2019独角兽企业重金招聘Python工程师标准>>>
这篇来说说github上的的toLua框架 LuaFramework。两个版本分别对应UGUI和NGUI。这个框架是基于新一代toLua#的,toLua#的性能是强过uLua和早期的toLua,且自带assetbundle机制,方便用户开发。
框架地址: https://github.com/jarjin/LuaFramework_UGUI
在使用过程中还是得多看看官方给的文档: http://doc.ulua.org/default.asp
总体来说有点绕,刚使用时由于结构不清楚容易迷失。不过设计思想还是很好的。在框架使用上,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 thenobject.listeners_[eventName] = {}endlocal ttarget = type(target)if ttarget == "table" or ttarget == "userdata" thenlistener = handler(target, listener)-- tag = ""endobject.listenerHandleIndex_ = object.listenerHandleIndex_ + 1local handle = string.format("HANDLE_%d", object.listenerHandleIndex_)object.listeners_[eventName][handle] = listenerreturn handle endfunction object:dispatchEvent(event)event.name = string.upper(event.name)local eventName = event.nameif object.listeners_[eventName] == nil then return endevent.target = objectfor handle, listener in pairs(object.listeners_[eventName]) dolocal ret = listener(event, a)if ret == false thenbreakelseif ret == "__REMOVE__" thenobject.listeners_[eventName][handle] = nilendend end
这样我们就可以指定一个调用者对象来监听一个事件,算是对特殊需求的使用。
最后,结合整体来说toLua及Lua Framework框架,是目前快速开发以LUA为主体语言的U3D项目的最佳选择! 后续来聊聊XLUA。
转载于:https://my.oschina.net/u/138823/blog/1612750
关于LUA+Unity开发_toLua篇【二】相关推荐
- 关于LUA+Unity开发_XLua篇
2019独角兽企业重金招聘Python工程师标准>>> XLUA的上手比toLua要快,而且使用也比较简单直接,最大的亮点在于热补丁技术. 1.关于热补丁技术 思路类似JAVA的AO ...
- C# + Unity开发日记(二) 利用宏命令实现简单的代码开关
unity提供的宏命令在开发中可以非常方便的对不同的代码进行区分,例如UNITY_EDITOR 就可以定义代码只在编辑器里运行,这样就可以在下面写一些编辑器专用的代码,而不用担心打包Android或者 ...
- iOS开发——高级篇——二维码的生产和读取
一.二维码的生成 从iOS7开始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤: 导入CoreImage框架 通过滤镜CIFilter生成二维码 ...
- 智能手机之硬件开发知识篇二
手机软件的常见故障及维修 软件故障的认识 1.什么是软件故障 我们已经大概了解了软件及单片机的系统,现在让我们来了解一下什么是软件的故障.在手机中,会引发控制系统不正常有两种情况:一方面是软件故障(如 ...
- 微信小程序开发入门篇(二)
✍.目录 配套视频教程:B站直达 微信小程序
- Unity开发OpenXR | (二)使用 OpenXR 制作一款简单VR示例场景 的全过程详细教程,包含两个实战案例。
文章目录
- [HTML5]移动Web应用程序开发 HTML5篇 (四) 多媒体API
介绍 本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具:HTML5,JavaScript, CSS3. 本篇是HTML5介绍的第三篇,主要介绍HTML5的Canvas API. ...
- GJM:Unity开发HTC vive 三、远处拖动3D物体 【转载】
腾讯GAD 窗间风月 原文URL : http://gad.qq.com/article/detail/7192223 版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 在项目中会需要拖动远处的 ...
- lua与c#交互篇 | 合理用好lua+unity,更省性能的方案整理
前言 在看了uwa之前发布的<Unity项目常见Lua解决方案性能比较>,决定动手写一篇关于lua+unity方案的性能优化文. 整合lua是目前最强大的unity热更新方案,毕竟这是唯一 ...
最新文章
- centos搭建kvm
- 海量数据库的查询优化及分页算法方案
- Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上)
- ORACLE 各种闪回操作
- 台式电脑桌面没有计算机,台式电脑开机后屏幕没显示怎么解决?
- elf section类型_ELF文件格式解析
- centos经常用到的一些文件
- WebGrid Enterprise免费下载
- 矢量绘图界的性价比之王-Affinity Designer
- org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugManifest
- android 自定义view实现仿QQ运动步数进度效果
- 在页面点击“生成二维码”,直接把二维码图片下载下来
- HTML中tabIndex属性马克 tabIndex='-1'是什么意思
- 博客系统(界面设计)
- 【知识点】单片机USB转TTL模块的相关知识
- 铸造数据安全堤坝,华为云数据灾备解决方案就是强
- 香港之行——大学·精神·交通
- [软件测试] 开卷有益—推荐阅读书单
- 麦当劳McDonalds 社会责任验厂(SWA)审核指南
- oracle_pdb_sid,Oracle12c多租户数据库 - PDB数据库的unplug及plug 1