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互调相关推荐

  1. tolua#是Unity静态绑定lua的一个解决方案

    tolua#是Unity静态绑定lua的一个解决方案 参考文章: (1)tolua#是Unity静态绑定lua的一个解决方案 (2)https://www.cnblogs.com/Leo_wl/p/6 ...

  2. Tolua使用笔记一:开始使用Tolua的准备工作与lua文件读取方法

    其实作者自带的那个说明已经很详细了,不过为了赚点访问量,我还是自己也来个简单的使用说明,顺便最近自己用的多,复习一下. 对于Tolua插件,我的介绍是基于作者自带的框架工程之中的那10个样例来做的~~ ...

  3. [Unity热更新]tolua# LuaFramework(七):lua使用DOTween

    相关链接: http://blog.csdn.net/u010665359/article/details/50950989 http://blog.csdn.net/u010665359/artic ...

  4. java+lua互相调用_Lua学习 2) —— Android与Lua互调

    2014-07-09 一.Android类调用lua并回调 Android调用Lua函数,同时把类作为参数传递过去,然后再Lua中回调类的函数 调用lua mLuaState = LuaStateFa ...

  5. Lua快速入门篇(基础概述)(Yanlz+toLua+xLua)

    <Lua热更新> ##<Lua热更新>发布说明: ++++"Lua热更新"开始了,立钻哥哥终于开始此部分的探索了. ++++作为游戏发布迭代的重要技术:Lu ...

  6. 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用

    2019独角兽企业重金招聘Python工程师标准>>> 在Lua第三篇中介绍了,如何在cocos2dx中使用Lua创建自定义类供Lua脚本调用使用,当时出于Himi对Lua研究不够深 ...

  7. Unity toLua加载lua的流程

    1.Unity加载Lua文件的流程 Unity中我们要加载Lua文件调用的函数是:LuaState类中的DoFile("xxx").我们可以看到流程是: LuaState:DoFi ...

  8. 我还能走很远---lua和tolua++

    我还能走很远 与技术有关 登录 注册 全站当前博客 空间 博客 好友 相册 留言 安仲明ID:foruok 共3740次访问,排名2万外好友2人,关注者4人 喜读小说,通俗.武侠.名著.网作. for ...

  9. 三国杀(2):QT5.12 C/C++ lua tolua++ 编译 集成,及使用介绍

    最近对lua比较感兴趣,工欲善其事必先利其器,方便下一步的学习. 一. 下面两张图比较形象描述了lua语言定位及交互方法: (1) Lua可以让程序员开发在Lua脚本中调用C/C++函数的接口,这个接 ...

最新文章

  1. 时间串变成Date类型的数据
  2. 自定义标签报 无法为TAG [my2:hello]加载标记处理程序类[null]
  3. Hadoop学习笔记—11.MapReduce中的排序和分组
  4. keepalived实现nginx的高可用
  5. flink读不到kafka数据问题
  6. 【HDU - 6662】Acesrc and Travel(树形dp,博弈dp)
  7. rgss加密文件解包器_Unity AssetBundle高效加密案例分享
  8. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
  9. libuv udp server和client
  10. SeismicUnix:cwpcmaps.c
  11. php教育网站设计案例_南广东区优秀网站设计案例集锦第四期
  12. devexpress 高分辨率显示问题_144Hz高刷+曲屏超2k 蚂蚁电竞显示器ANT271QC 小白到专业电竞跳板...
  13. HDU 6134 2017 多校训练:Battlestation Operational(莫比乌斯反演+积性函数)
  14. rm: cannot remove ‘malloc.pro/.user.ini‘: Operation not permitted
  15. 第7章 PCA与梯度上升法 学习笔记下
  16. 苹果电子邮件怎么注册_LOL英雄联盟手游谷歌账号怎么注册 谷歌账号注册方法步骤教程介绍...
  17. 在腾讯的八年,我的职业思考!
  18. js判断APP和浏览器
  19. 本科就学人工智能有意义吗?
  20. c语言中val是什么函数,val(val是什么意思)

热门文章

  1. MATLAB循环结构之while语句
  2. 点击pv转化率_PV、UV、访问次数、跳出率、转化率、平均访问时长
  3. MeBook-Spider(我的小书屋爬虫)
  4. visio2013下载有32位和64位
  5. 给EditText添加下划线
  6. 计算机网络】网络安全 : 计算机网络安全威胁 ( 四种网络攻击类型 | 主动攻击与被动攻击 | 分布式拒绝服务攻击 DDos | 恶意程序 | 计算机网络安全目标)
  7. Fegin的基本调用
  8. 小程序实现授权完整流程
  9. linux ssh.rpm包下载,openssh RPM包制作
  10. 安装系统提示映像失败0x5:拒绝访问