学习tolua#·20多个例子
初始项目搭建
- 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 # 是还实现了一些函数:
Yield
、WaitForEndOfFrame
等
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多个例子的更多相关文章
- 值得 Web 开发人员学习的20个 jQuery 实例教程
这篇文章挑选了20个优秀的 jQuery 实例教程,这些 jQuery 教程将帮助你把你的网站提升到一个更高的水平.其中,既有网站中常用功能的的解决方案,也有极具吸引力的亮点功能的实现方法,相信通过对 ...
- Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法
Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法 在上一篇笔记中我们介绍了Ext.Net的简单用法,并创建了一个简单的登录表单.今天我们将看一下如何更好是使用FormPanel ...
- SQL反模式学习笔记20 明文密码
目标:恢复或重置密码 反模式:使用明文存储密码 1.存储密码 使用明文存储密码或者在网络上传递密码是不安全的. 如果攻击者截取到你用来插入(或者修改)密码的sql语句,就可以获得密码. 黑客获 ...
- golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题
golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...
- Android学习系列(20)--App数据格式之解析Json
JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习. 恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位. 为了文 ...
- iOS阶段学习第20天笔记(MRC内存管理)
iOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效 OC中采用 ...
- [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...
- 学习vue 20天,我写了点东西
往昔 最初团队里使用Angularjs进行开发,刚开始还好,到了项目后期越发感觉Angularjs太重了,以至于后来重构项目时,毅然放弃Angularjs,投入了Vue的怀抱.除了组建团队时,是我搭建 ...
- Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期
学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看 ...
随机推荐
- 【转】搭建Python的Eclipse开发环境之安装PyDev插件--离线安装
原文网址:http://blog.csdn.net/wangpingfang/article/details/7181223 使用update site安装pydev插件 注意:该安装指南针对ecli ...
- Android 异步加载神器Loader全解析
在之前呢,我们经常会有这种需求,比如在某个activity,或者某个fragment里面,我们需要查找某个数据源,并且显示出来,当数据源自己更新的时候,界面也要及时响应. 当然咯,查找数据这个过程可能 ...
- 一种Javascript解释ajax返回的json的好方法
通常ajax请求返回的格式为json或者xml,如果返回的是json,则可以通过转换成javascript对象进行操作,如下: 1.ajax请求的controller实现 @RequestMappin ...
- K2 Blackpearl开发技术要点(Part2)
转:http://www.cnblogs.com/dannyli/archive/2012/09/14/2685282.html K2 Blackpearl开发技术要点(Part2)
- 纯css实现鼠标感应弹出二级菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- suse10的网络配置(静态IP)
感觉跟fedora的差别还是蛮大的, 主要是配置文件的不同, 尤其是默认路由, 多了一个单独的文件ifroute-xxx suse10的网卡配置文件在/etc/sysconfig/network ...
- hdu 4643(计算几何)
题意:容易理解 分析:切换的地点为两个基站所在直线的中垂线与两座城市所在直线的交点. 代码实现: #include <cstdio> #include <cmath> #inc ...
- HDU5828 Rikka with Sequence 线段树
分析:这个题和bc round 73应该是差不多的题,当时是zimpha巨出的,那个是取phi,这个是开根 吐槽:赛场上写的时候直接维护数值相同的区间,然后1A,结果赛后糖教一组数据给hack了,仰慕 ...
- 《学习OpenCV》中求给定点位置公式
假设有10个三维的点,使用数组存放它们有四种常见的形式: ①一个二维数组,数组的类型是CV32FC1,有n行,3列(n×3) ②类似①,也可以用一个3行n列(3×n)的二维数组 ③④用一个n行1列(n ...
- 说说Python 中的文件操作 和 目录操作
我们知道,文件名.目录名和链接名都是用一个字符串作为其标识符的,但是给我们一个标识符,我们该如何确定它所指的到底是常规文件文件名.目录名还是链接名呢?这时,我们可以使用os.path模块提供的isfi ...