初始项目搭建

  • 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. eclipse环境下tomcat远程调试方法

    前提:Windows环境tomcat是以catalina.bat方式而非Windows服务形式启动(两者所使用的JAVA配置及JVM参数会有差异). 服务器段设置 方法1:修改CATALINA_OPT ...

  2. core文件分析

    http://baidutech.blog.51cto.com/4114344/904419/ http://www.newsmth.net/pc/pccon.php?id=10001977& ...

  3. EasyDarwin返回401 Unauthorized解决方法

    在向EsayDarwin发起 RTSP DESCRIBE请求或者ANNOUNCE推送时,EasyDarwin会返回401 Unauthorized: 原因:在EasyDarwin的RTSP Sessi ...

  4. SPF详解2

    什么是SPF?   这里的SPF不是防晒指数,而是指Sender Policy Framework.翻译过来就是发信者策略架构,比较拗口,通常都直接称为SPF.   SPF是跟DNS相关的一项技术,它 ...

  5. mysql Access denied for user \'root\'@\'localhost\'”解决办法总结,下面我们对常见的出现的一些错误代码进行分析并给出解决办法,有需要的朋友可参考一下。

    mysql Access denied for user \'root\'@\'localhost\'”解决办法总结,下面我们对常见的出现的一些错误代码进行分析并给出解决办法,有需要的朋友可参考一下. ...

  6. Locker

    题意: 有2个数字串,每次可以变化1-3位(每位+1或-1(0-9,9-0)可循环),求由1串变到2串的最小用的次数. 分析: dp[i][num]表示变到第i位时最后两位组成的数是num时最小次数( ...

  7. loadrunner下检查点乱码情况处理

    对于很多用过LR的人来说,乱码一直是很纠结的事情,尤其是对新手来说.网上给的解决方法是在录制的时候勾选UTF-8选项,但是似乎并没有解决. 对于用户名为中文或者检查点为中文的情况,我们又该如何去处理呢 ...

  8. 黑马程序员——有关protocol的小结

    在OC程序中经常会有这样的问题就是一个类想让其他类帮自己实现某些方法,然后再将结果返回给这个类:如何让一个类要找的代理去实现自己想要的方法呢? 这样就需要有一个协议,让能遵守协议的其他类都能实现协议中 ...

  9. Metasploit启动

    一.启动Kali的PostgreSQL服务 由于使用PostgreSQL作为数据库,因此,必须先运行它. root@kali:~# service postgresql start 使用ss -ant ...

  10. HTML的<head>中的内容总结

    [01]文件头部一般包含标题标签.<meta>标签.内联样式表及预定义脚本等. [02]<meta>标签在网页内容中不显示,但它的作用不容忽视.<meta>标签主要 ...