初始项目搭建

  • clone官方库
  • 新建unity工程
  • 依次把官方库里的Assets和Unity5.x/Assets拷贝到项目Assets里

打开unity工程, 开始逐个学习例子,例子目录:

1. hello world

  • 新建luaState
  • 执行字符串命令print ('hello tolua#')

unity的console里找到输出结果(找的不是很容易呀)

2. run scripts from file

  • 添加源码建search path
  • 读取执行lua源文件

脚本内容



添加脚本搜索路径到luaState里。



执行方法1,dofile:执行脚本内容



执行方法2,require:执行一次脚本内容



输出结果

3. call lua function

  • lua加载执行代码,定义函数
  • c#调用lua定义的函数
  • 释放c#保存的lua函数

定义函数test.luaFunc





C#获取lua的function



执行方式1:



源码中说要少用,Call实现



执行方式2:和1差不多,对返回值特殊处理了



释放:

4. c# access lua variable

  • c# 用 luaState来存取lua全局对象



5. lua coroutine

  • tolua #改写了lua里的协程

6. lua coroutine

  • tolua # 是还实现了一些函数:YieldWaitForEndOfFrame

7. LuaThread

  • tolua # 把lua协程包装成LuaThread,方便c#控制协程的执行。

8. lua access c# array

  • lua访问c#的array

c#里构造一个array,通过函数传参的方式传给lua



lua里使用接口访问c#的array

9. lua access c# Dictionary

  • lua读写c#的Dictinary

也是tolua#导出了一些接口,具体看例子就是了。

这个例子里有放置一个tolua#导出自定义c#类接口的样例,可以看看。

10. lua access c# Enum

  • lua访问c#的Enum,Enum在lua里可以获得字符串名字,也可以转成整数。

11. lua access c# delegate

  • lua访问c#的delegate和event

12. lua access unity GameObject

  • lua访问UnityEngine.GameObject

例子是在场景中不停的加白色粒子



代码很简单,生成一个gameobject,添加个粒子组件。

tolua#生成的LuaBinder.cs导出了大量的接口





13. 演示luaClient的使用

luaClient继承MonoBehaviour。

14. lua 针对c#的out 类型参数处理

  • out类型参数,转换成返回值,lua支持多个返回值。

c#里代码



lua里代码

15. 演示protobuf的使用

  • c#导出,c#自己使用
  • protoc-gen-lua生成,给lua使用。

16. 延时int64使用

  • tolua#提供了个int64的扩展库,把int64分成两个int32了。

17. tolua模拟继承

例子里使用tolua.setpeer扩展包装transform。能够提升性能。





这样获取transform的position时,就不用每次都从tramsform里查找position属性了。





20万次赋值,耗时统计对比

使用方式 耗时/ms
c# 20.7
lua extend 46.0
lua 160

18. 将lua打包成资源包使用

  • 菜单命令Lua/build bundle files not jit,先打包输出到/Assets/StreamingAssets目录
  • 使用assetBuddle和WWW加载资源。



    例子里是加载的本地资源

19. 使用cjson

  • tolua#集成了第三方库cjson

    开启



    使用例子

20. 使用utf8

  • tolua#扩展的utf8库,使用的lua版本是5.1的,并没有utf8的库。

21. 使用C# string

  • lua使用c#的字符串



22. 使用反射

  • lua里使用c#的Reflection机制

反射理解:通过实例获取类定义,或者通过字符串名字获取类定义,然后调用获得的类定义中的函数。

例子有些复杂,没细看,应该用不到。

23. 使用C# List

例子太长,不看了。

24. 测试函数重载

C#支持重载函数,这个例子用于测试这个。

没细看。

24. 一些性能测试的例子

里面的第一个例子是这种类型的



这个在lua里的耗时是c#里的8倍,可以优化成2倍。

见第17个例子。

25. 测试lua堆栈,和一些出错情况。

以后细看。

学习tolua#·20多个例子的更多相关文章

  1. 值得 Web 开发人员学习的20个 jQuery 实例教程

    这篇文章挑选了20个优秀的 jQuery 实例教程,这些 jQuery 教程将帮助你把你的网站提升到一个更高的水平.其中,既有网站中常用功能的的解决方案,也有极具吸引力的亮点功能的实现方法,相信通过对 ...

  2. Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法

    Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法 在上一篇笔记中我们介绍了Ext.Net的简单用法,并创建了一个简单的登录表单.今天我们将看一下如何更好是使用FormPanel ...

  3. SQL反模式学习笔记20 明文密码

    目标:恢复或重置密码 反模式:使用明文存储密码 1.存储密码 使用明文存储密码或者在网络上传递密码是不安全的. 如果攻击者截取到你用来插入(或者修改)密码的sql语句,就可以获得密码.     黑客获 ...

  4. golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题

    golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...

  5. Android学习系列(20)--App数据格式之解析Json

    JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习.     恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位.     为了文 ...

  6. iOS阶段学习第20天笔记(MRC内存管理)

    iOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效      OC中采用 ...

  7. [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select

    以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...

  8. 学习vue 20天,我写了点东西

    往昔 最初团队里使用Angularjs进行开发,刚开始还好,到了项目后期越发感觉Angularjs太重了,以至于后来重构项目时,毅然放弃Angularjs,投入了Vue的怀抱.除了组建团队时,是我搭建 ...

  9. Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期

    学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看 ...

随机推荐

  1. Android 一步一步教你使用ViewDragHelper

    在自定义viewgroup的时候 要重写onInterceptTouchEvent和onTouchEvent 这2个方法 是非常麻烦的事情,好在谷歌后来 推出了ViewDragHelper这个类.可以 ...

  2. python tile函数用法

    tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题 ...

  3. 基于JavaScript的REST客户端框架

    现在REST是一个比较热门的概念,REST已经成为一个在Web上越来越常用的应用,基于REST的Web服务越来越多,包括Twitter在内的微博客都是用REST做为对外的API,先前我曾经介绍过“基于 ...

  4. 【转】linux之e2label命令

    转自:http://www.th7.cn/system/lin/201311/46743.shtml 前言 e2label命令,用于获取或设置ext2.ext3文件系统对应的分区的卷标. 卷标:简单来 ...

  5. Android无限级树状结构

    通过对ListView简单的扩展.再封装,即可实现无限层级的树控件TreeView. package cn.asiontang.nleveltreelistview; import android.a ...

  6. Building nginx from Sources(从源代码安装nginx)

    Building nginx from Sources(从源代码安装nginx) The build is configured using the configure command.  安装用配置 ...

  7. Using NuGet without committing packages to source control(在没有把包包提交到代码管理器的情况下使用NuGet进行还原 )

    外国老用的语言就是谨慎,连场景都限定好了,其实我们经常下载到有用NuGet引用包包然而却没法编译的情况,上谷歌百度搜又没法使用准确的关键字,最多能用到的就是nuget跟packages.config, ...

  8. 写好Hive 程序的五个提示

    转自http://www.alidata.org/archives/622 使用Hive可以高效而又快速地编写复杂的MapReduce查询逻辑.但是某些情况下,因为不熟悉数据特性,或没有遵循Hive的 ...

  9. Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法

    From: http://www.cnblogs.com/pengsixiong/p/4823473.html 属性分为实例属性与类属性 方法分为普通方法,类方法,静态方法 一:属性: 尽量把需要用户 ...

  10. JS认证Exchange

    function ExchangeLogin() { vstrServer='<%=LocationUrl %>' vstrDomain = '<%=userLogin.AD %&g ...