代码参考

代码文件参考下述详解的类图,工程参考第零章工程说明

概述

在现代项目的开发中,通常会使用一些脚本语言来提升开发效率。现在使用最普遍的脚本语言是Lua,它可以大大方便我们开发业务模块,且可以在运行期快速编译,以及方便热更。在U3D中,lua作为脚本使用比较广泛,这里使用tolua方案。

关键

  • tolua方案与框架适配

    • 文件加载

      • 不单独管理Lua的AB包
      • 加载路径管理
      • 资源加载使用资源管理模块的接口
    • LuaMgr接入到生命周期模块
  • tolua和C#交互会耗费资源(C#的对象内存地址可能会动态偏移,tolua在C#对象时需要去用分配的id去查找对象),可以使用封装一些工具减少交互,例如UI设置一张图片直接传入C#对象、Image控件相对路径和资源路径让C#的工具方法实现功能比从C#对象中拿到子控件,再用子控件去设置图片的效率要好些。(lua与宿主语言的交互细节参考:跳转链接:lua5.4源码剖析:三. C++与Lua相互调用

实现

  • LuaMgr:ToLua与框架的中介者
  • LuaState:lua虚拟机,维护lua脚本运行环境
  • Tolua:代理lua库函数调用
  • LuaBinder:lua静态反射C#生成的代码,向lua虚拟机注册C#类
  • LuaLoder:lua资源寻址、加载、解密
  • LuaUtil:lua-C#调用效率优化的一些方法
  • LuaLoop:lua更新、协程驱动,垃圾收集

大概的业务如图所示

备注

  • lua资源更新可以不纳入版本管理,如:只是某个lua代码拼错了词,一行代码就修复提交了。为lua资源单独生成文件Md5上传CDN,更新资源检测时对比本地和CDN的lua文件MD5,直接下载更新文件。

U3DFrameWorkDemo:三、脚本模块的更多相关文章

  1. 【转】PowerShell入门(十一):编写脚本模块

    转至:http://www.cnblogs.com/ceachy/archive/2013/03/08/PowerShell_Script_Module.html 现在通过编写模块就可以在PowerS ...

  2. maven小项目注册服务(三)--web模块

    java的web应用打包方式一般为war它和jar的区别就是包含了更多的资源和文件,如JSP文件,静态资源文件,servlet等等.war包的核心就WEB-INF文件夹下必须有一个web.xml 的配 ...

  3. 两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍

    两款[linux字符界面下]显示[菜单],[选项]的powershell脚本模块介绍 powershell linux  ps1 menu choice Multiselect 传教士 菜单 powe ...

  4. Linux下查看Python安装了哪些脚本模块

    Linux下查看Python安装了哪些脚本模块 1.什么是rpm ? rpm 即RedHat Package Management,是RedHat的发明之一 .现在包括OpenLinux.fedora ...

  5. Spring练习,定义三个模块,使用<import>标签完成分模块配置开发,模拟实现学生借书和还书的过程,将结束输出到控制台。

    相关 知识 >>> 相关 练习 >>> 实现要求: 在图书管理系统中,学生管理模块.书籍管理模块和借还书管理模块等其他模块,相互配合协作,促使系统的运行流畅.定义三 ...

  6. 初学Node(三)模块系统

    模块系统 Node根据CommonJS规范实现了一套自己的模块机制,可以使用require()导入一个模块,使用module.exports导出一个模块. require使用 在Node中我们可以使用 ...

  7. Nodejs学习笔记(三)--- 模块

    目录 简介及资料 自定义模块 创建一个自定义模块 调用自定义模块 exports和module.exports 区别 exports和module.exports 覆盖 其它... 简介及资料 通过N ...

  8. ASP.NET MVC +EasyUI 权限设计(三)基础模块

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中呢,我们基本上搭建好了环境,那么本章我们就从基础模块开始写起.由于用户,角色,动作三个当中,都是依赖与动作的,所以本 ...

  9. 爬虫基础(三)-----selenium模块应用程序

    摆脱穷人思维 <三> :  培养"目标导向"的思维:  好项目永远比钱少,只要目标正确,钱总有办法解决. 一 selenium模块 什么是selenium?seleni ...

  10. python 15 常用模块三 re模块

    一.正则模块 正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹 ...

随机推荐

  1. 简单写一个C函数供C#代码调用

    在C#中调用C++动态库导出的函数时,有时候需要封送一些复杂的数据结构,这时候不确定自己封送的数据的内存布局对不对,就想要弄个简单的C++项目模拟一下被调用的接口,检查一下C#的数据封送是否正确. 因 ...

  2. mysql索引优化解决方案

    mysql索引优化解决方案(在b站动力节点学习的) 可能因为这个视频是比较新的视频,评论区都没有什么笔记和文档.于是我就跟着视频边学边记录笔记.希望有些建表的代码,有需要的可以直接复制,减少了大家的无 ...

  3. C# 文件正由另一进程使用,该进程无法访问该文件

    OpenFileDialog控件,而使用该控件时若没有将条件设置好,很容易出现以下提示: 打开一个文件后,尝试重新打开一次该文件,或者打开该文件后想对该文件进行其他操作的时候,就容易出现这个错误提示, ...

  4. SQL Server 插入自增列

    set identity_insert t on insert into t (id, name) values(1, 'sqlstudy') set identity_insert t off ht ...

  5. visual studio 推送项目上自己的github账户报错

    https://blog.csdn.net/weixin_43129574/article/details/104753639?utm_medium=distribute.pc_aggpage_sea ...

  6. OpenAiTx 帮助 Gitee 项目翻译出海、开拓国际社群

    使用方式: 只需要在 https://openaitx.github.io/ 提交 Gitee 项目 URL 即可 系统会自动为你的项目 Readme, Wiki 生成翻译 20 语言,系统翻译完成后 ...

  7. SCAU 2018年新生赛 初出茅庐 全题解

    (em...题面都比较直接这里就不赘述题意了) 查看代码点击 veiw code 18363 ACMer不得不知道的事儿(五) 思路:题目问有牌子就行,那就贪心,当懒狗摸铜牌最优. 但是有一点要注意. ...

  8. F407 中printf 的实现

    装载  自  http://bbs.21ic.com/icview-860453-1-1.html 配置串口,利用printf函数输出字符,结果输出的还是ASCII码,这是为什么?难道是我的配置问题? ...

  9. 创建第一个Streamlit应用

    创建应用程序 如果您已经顺利完成了前面的步骤,那么您很可能已经安装了 Streamlit 并在"基本概念"和"高级概念"部分中完成了基础操作.如果没有的话,现在 ...

  10. SciTech-BigDataAIML-LLM-Transformer Series-Self-Attention:由Dot-Product(向量点乘)说起

    本文公式中变量加粗表示该变量为向量或矩阵 Softmax后每个值\(\in [0, 1)\)且总和为0 经过Softmax的归一化后: 每个值是一\(\in [0, 1)\)的权重系数(可理解成一&q ...