tolua里C#与lua互调
来源:互联网 发布:网络ssid 编辑:程序博客网 时间:2024/05/03 21:50
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 ref private int m_BindLuaRef = -1;//the lua class bind class ref private int m_StartRef = -1;//the 'Start' function of lua private int m_OnDestroyRef = -1;// the 'OnDestroy' function of lua void 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()endendfunction FirstLua:OnDestroy()print("OnDestroy")endfunction FirstLua.Function1()if self == nil thenprint("FirstLua Function1 self is nil")elseprint("FirstLua Function1")endendfunction Function2()print("Function2")end
上面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()); }
0 0
- tolua里C#与lua互调
- tolua 框架 c# 调用 lua 过程 笔记
- Tolua使用笔记二:lua与C#的函数,变量交互方法
- Tolua使用笔记五:lua中遍历访问c#的Dictionary类对象与枚举类型
- Tolua使用笔记二:lua与C#的函数,变量交互方法
- Tolua使用笔记五:lua中遍历访问c#的Dictionary类对象与枚举类型
- 【Lua】tolua
- Lua&tolua++与c++的使用
- cocos2d-x LUA 2.x里tolua++的一个隐患
- 【lua】使用 tolua 实现 lua 与 c++ 交互
- [一][ToLua]C#与toLua代码相互调用
- 项目记录29--unity-tolua框架 c#导出定时器lua
- ToLua#--lua调用C#泛型结构以及遍历
- Tolua使用笔记六:在lua中操作C#的委托事件与在lua中对Unity的GameObject的操作
- Tolua使用笔记六:在lua中操作C#的委托事件与在lua中对Unity的GameObject的操作
- Tolua使用笔记一:开始使用Tolua的准备工作与lua文件读取方法
- Tolua使用笔记一:开始使用Tolua的准备工作与lua文件读取方法
- 使用tolua++实现C++与LUA相互调用
- Leetcode 434. Number of Segments in a String (Easy) (cpp)
- C#:用WebBrowser获取JS动态加载以后的页面代码并保存图片
- Atitit Data Matrix dm码的原理与特点
- 分布式跟踪系统(二):Zipkin的Span模型
- 【LeetCode】 389. Find the Difference
- tolua里C#与lua互调
- 计算机体系结构原理——数据操控(CPU工作原理)
- 关于IO流的输入输出流同时存在应如何处理异常?
- 关于Free-RTOS调度器启动前API调用造成中断关闭问题
- 优化SQL查询:如何写出高性能SQL语句
- Mac OSX下增加TCP连接数
- Java中Filter、Servlet、Listener的学习
- 第一次
- No view found for id 0x7f080011 for fragment