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篇【二】相关推荐

  1. 关于LUA+Unity开发_XLua篇

    2019独角兽企业重金招聘Python工程师标准>>> XLUA的上手比toLua要快,而且使用也比较简单直接,最大的亮点在于热补丁技术. 1.关于热补丁技术 思路类似JAVA的AO ...

  2. C# + Unity开发日记(二) 利用宏命令实现简单的代码开关

    unity提供的宏命令在开发中可以非常方便的对不同的代码进行区分,例如UNITY_EDITOR 就可以定义代码只在编辑器里运行,这样就可以在下面写一些编辑器专用的代码,而不用担心打包Android或者 ...

  3. iOS开发——高级篇——二维码的生产和读取

    一.二维码的生成 从iOS7开始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤: 导入CoreImage框架 通过滤镜CIFilter生成二维码 ...

  4. 智能手机之硬件开发知识篇二

    手机软件的常见故障及维修 软件故障的认识 1.什么是软件故障 我们已经大概了解了软件及单片机的系统,现在让我们来了解一下什么是软件的故障.在手机中,会引发控制系统不正常有两种情况:一方面是软件故障(如 ...

  5. 微信小程序开发入门篇(二)

    ✍.目录 配套视频教程:B站直达 微信小程序

  6. Unity开发OpenXR | (二)使用 OpenXR 制作一款简单VR示例场景 的全过程详细教程,包含两个实战案例。

    文章目录

  7. [HTML5]移动Web应用程序开发 HTML5篇 (四) 多媒体API

    介绍 本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具:HTML5,JavaScript, CSS3. 本篇是HTML5介绍的第三篇,主要介绍HTML5的Canvas API. ...

  8. GJM:Unity开发HTC vive 三、远处拖动3D物体 【转载】

    腾讯GAD  窗间风月 原文URL : http://gad.qq.com/article/detail/7192223 版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 在项目中会需要拖动远处的 ...

  9. lua与c#交互篇 | 合理用好lua+unity,更省性能的方案整理

    前言 在看了uwa之前发布的<Unity项目常见Lua解决方案性能比较>,决定动手写一篇关于lua+unity方案的性能优化文. 整合lua是目前最强大的unity热更新方案,毕竟这是唯一 ...

最新文章

  1. centos搭建kvm
  2. 海量数据库的查询优化及分页算法方案
  3. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上)
  4. ORACLE 各种闪回操作
  5. 台式电脑桌面没有计算机,台式电脑开机后屏幕没显示怎么解决?
  6. elf section类型_ELF文件格式解析
  7. centos经常用到的一些文件
  8. WebGrid Enterprise免费下载
  9. 矢量绘图界的性价比之王-Affinity Designer
  10. org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugManifest
  11. android 自定义view实现仿QQ运动步数进度效果
  12. 在页面点击“生成二维码”,直接把二维码图片下载下来
  13. HTML中tabIndex属性马克 tabIndex='-1'是什么意思
  14. 博客系统(界面设计)
  15. 【知识点】单片机USB转TTL模块的相关知识
  16. 铸造数据安全堤坝,华为云数据灾备解决方案就是强
  17. 香港之行——大学·精神·交通
  18. [软件测试] 开卷有益—推荐阅读书单
  19. 麦当劳McDonalds 社会责任验厂(SWA)审核指南
  20. oracle_pdb_sid,Oracle12c多租户数据库 - PDB数据库的unplug及plug 1

热门文章

  1. 数据库设计中的范式、关联与nosql分析【转】
  2. FB邮件服务器测试smtp,pop3
  3. jQuery zTree几种常用的使用方式
  4. ES6关于Promise的用法详解
  5. Nginx+FastCGI
  6. jrtplib 分包处理
  7. 从0实现一个tinyredux
  8. InfoPath 揭秘 (一)
  9. android中设置ListView的选中的Item的背景颜色(附源码)
  10. Linux内核源码树学习:Kconfig和Makefile