tolua里C#与lua互调
tolua里C#与lua互调,本文主要讲的是C#调lua方法,下面贴上代码
C#
using System;
using UnityEngine;
using UnityEditor;
using LuaInterface;
public class LuaBehavior : MonoBehaviour
{private const string luaPath = "Assets/StreamingAssets/LuaScripts/";public string luaFullPath;public string luaName;private LuaState lua;private int m_ClassRef = -1;//the lua class refprivate int m_BindLuaRef = -1;//the lua class bind class refprivate int m_StartRef = -1;//the 'Start' function of luaprivate int m_OnDestroyRef = -1;// the 'OnDestroy' function of luavoid Awake(){lua = new LuaState();lua.Start();}void Start(){if (lua.LuaDoFile(luaPath + luaFullPath)){Debug.Log("Load file success: fileName = " + luaFullPath);}lua.LuaGetGlobal("FirstLua");m_ClassRef = lua.LuaRef(-1);if (m_ClassRef == LuaDLL.LUA_REFNIL){Debug.LogError("not find the ref object");}lua.LuaGetGlobal("FirstLua");lua.LuaRawSetI(LuaIndexes.LUA_REGISTRYINDEX, m_ClassRef);lua.LuaGetGlobal("FirstLua");lua.LuaGetField(-1, "Start");lua.LuaRawGetI(LuaIndexes.LUA_REGISTRYINDEX, m_ClassRef);lua.PCall(1, 0);lua.LuaPop(1);lua.LuaGetGlobal("FirstLua");lua.LuaGetField(-1, "Function1");lua.PCall(0, 0);lua.LuaPop(1);LuaFunction func = lua.GetFunction("Function2");if (func == null){Debug.Log("Func is Null");}func.Call();func.Dispose();}void OnDestroy(){}}
Lua代码
--Created By: xikuo yu
--Time: 2016-12-24FirstLua = {}
setmetatable({},FirstLua)
function FirstLua:Start()if self == nil thenprint("FirstLua Start self is nil")elseprint("FirstLua Start")self:OnDestroy()end
endfunction FirstLua:OnDestroy()print("OnDestroy")
endfunction FirstLua.Function1()if self == nil thenprint("FirstLua Function1 self is nil")elseprint("FirstLua Function1")end
endfunction Function2()print("Function2")
end
lua有3中方法,1)带冒号(:)方法,需要有lua表名通过冒号调用,或者传入对应的一个lua表,即方法默认第一个对象为lua表自身,即self。2)带点(.)方法,需要由lua表名通过点操作符调用,方法参数与调用时传入的一直,没有默认的self。3)Global方法,即没有lua表前缀的。
上面C#代码中展示了C#调lua的几种方式
=====================2016.12.25====================
注意,今天又试了下lua_ref的功能,发现tolua的LuaRef是不好使的,总是返回1,然后发现还有一个ToLuaRef,结果返回唯一的ref
void Start(){if (lua.LuaDoFile(luaPath + luaFullPath)){Debug.Log("Load file success: fileName = " + luaFullPath);}lua.LuaGetGlobal("FirstLua");m_ClassRef = lua.ToLuaRef(); //lua.LuaRef(-1);if (m_ClassRef == LuaDLL.LUA_REFNIL){Debug.LogError("not find the ref object");}lua.LuaGetGlobal("FirstLua");lua.LuaRawSetI(LuaIndexes.LUA_REGISTRYINDEX, m_ClassRef);lua.LuaGetGlobal("FirstLua");lua.LuaGetField(-1, "Start");m_StartRef = lua.ToLuaRef();//lua.LuaRef(-1);lua.LuaGetField(-1, "Start");lua.LuaRawSetI(LuaIndexes.LUA_REGISTRYINDEX, m_StartRef);lua.LuaGetField(-1, "OnDestroy");m_OnDestroyRef = lua.ToLuaRef(); //lua.LuaRef(-1);lua.LuaGetField(-1, "OnDestroy");lua.LuaRawSetI(LuaIndexes.LUA_REGISTRYINDEX, m_OnDestroyRef);Debug.Log("first lua = " + m_ClassRef);Debug.Log("start ref = " + m_StartRef);Debug.Log("destroy ref = " + m_OnDestroyRef);lua.LuaRawGetI(LuaIndexes.LUA_REGISTRYINDEX, m_StartRef);lua.LuaRawGetI(LuaIndexes.LUA_REGISTRYINDEX, m_ClassRef);lua.PCall(1, 0);lua.LuaPop(1);Debug.Log("top " + lua.LuaGetTop());}
tolua里C#与lua互调相关推荐
- tolua#是Unity静态绑定lua的一个解决方案
tolua#是Unity静态绑定lua的一个解决方案 参考文章: (1)tolua#是Unity静态绑定lua的一个解决方案 (2)https://www.cnblogs.com/Leo_wl/p/6 ...
- Tolua使用笔记一:开始使用Tolua的准备工作与lua文件读取方法
其实作者自带的那个说明已经很详细了,不过为了赚点访问量,我还是自己也来个简单的使用说明,顺便最近自己用的多,复习一下. 对于Tolua插件,我的介绍是基于作者自带的框架工程之中的那10个样例来做的~~ ...
- [Unity热更新]tolua# LuaFramework(七):lua使用DOTween
相关链接: http://blog.csdn.net/u010665359/article/details/50950989 http://blog.csdn.net/u010665359/artic ...
- java+lua互相调用_Lua学习 2) —— Android与Lua互调
2014-07-09 一.Android类调用lua并回调 Android调用Lua函数,同时把类作为参数传递过去,然后再Lua中回调类的函数 调用lua mLuaState = LuaStateFa ...
- Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)
<Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探索了. ++++作为游戏发布迭代的重要技术:Lu ...
- 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
2019独角兽企业重金招聘Python工程师标准>>> 在Lua第三篇中介绍了,如何在cocos2dx中使用Lua创建自定义类供Lua脚本调用使用,当时出于Himi对Lua研究不够深 ...
- Unity toLua加载lua的流程
1.Unity加载Lua文件的流程 Unity中我们要加载Lua文件调用的函数是:LuaState类中的DoFile("xxx").我们可以看到流程是: LuaState:DoFi ...
- 我还能走很远---lua和tolua++
我还能走很远 与技术有关 登录 注册 全站当前博客 空间 博客 好友 相册 留言 安仲明ID:foruok 共3740次访问,排名2万外好友2人,关注者4人 喜读小说,通俗.武侠.名著.网作. for ...
- 三国杀(2):QT5.12 C/C++ lua tolua++ 编译 集成,及使用介绍
最近对lua比较感兴趣,工欲善其事必先利其器,方便下一步的学习. 一. 下面两张图比较形象描述了lua语言定位及交互方法: (1) Lua可以让程序员开发在Lua脚本中调用C/C++函数的接口,这个接 ...
最新文章
- 时间串变成Date类型的数据
- 自定义标签报 无法为TAG [my2:hello]加载标记处理程序类[null]
- Hadoop学习笔记—11.MapReduce中的排序和分组
- keepalived实现nginx的高可用
- flink读不到kafka数据问题
- 【HDU - 6662】Acesrc and Travel(树形dp,博弈dp)
- rgss加密文件解包器_Unity AssetBundle高效加密案例分享
- c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
- libuv udp server和client
- SeismicUnix:cwpcmaps.c
- php教育网站设计案例_南广东区优秀网站设计案例集锦第四期
- devexpress 高分辨率显示问题_144Hz高刷+曲屏超2k 蚂蚁电竞显示器ANT271QC 小白到专业电竞跳板...
- HDU 6134 2017 多校训练:Battlestation Operational(莫比乌斯反演+积性函数)
- rm: cannot remove ‘malloc.pro/.user.ini‘: Operation not permitted
- 第7章 PCA与梯度上升法 学习笔记下
- 苹果电子邮件怎么注册_LOL英雄联盟手游谷歌账号怎么注册 谷歌账号注册方法步骤教程介绍...
- 在腾讯的八年,我的职业思考!
- js判断APP和浏览器
- 本科就学人工智能有意义吗?
- c语言中val是什么函数,val(val是什么意思)
热门文章
- MATLAB循环结构之while语句
- 点击pv转化率_PV、UV、访问次数、跳出率、转化率、平均访问时长
- MeBook-Spider(我的小书屋爬虫)
- visio2013下载有32位和64位
- 给EditText添加下划线
- 计算机网络】网络安全 : 计算机网络安全威胁 ( 四种网络攻击类型 | 主动攻击与被动攻击 | 分布式拒绝服务攻击 DDos | 恶意程序 | 计算机网络安全目标)
- Fegin的基本调用
- 小程序实现授权完整流程
- linux ssh.rpm包下载,openssh RPM包制作
- 安装系统提示映像失败0x5:拒绝访问