Unity3D C#调用UniLua
来源:互联网 发布:尼采知乎 编辑:程序博客网 时间:2024/06/05 07:21
Test.CS
using UnityEngine;using System.Collections;using UniLua;using System;public class Test : MonoBehaviour{ public string LuaScriptFile = "framework/fuck.lua"; private ILuaState Lua; private int AwakeRef; private int Fuck; void Awake() { if (Lua == null) { Lua = LuaAPI.NewState(); Lua.L_OpenLibs(); var status = Lua.L_DoFile(LuaScriptFile); if (status != ThreadStatus.LUA_OK) { throw new Exception(Lua.ToString(-1)); } if (!Lua.IsTable(-1)) { throw new Exception("framework main's return value is not a table"); } AwakeRef = StoreMethod("awake"); Fuck = StoreMethod("fuck"); Lua.Pop(1); Debug.Log("Lua Init Done"); CallMethod(AwakeRef); } } // Use this for initialization void Start() { } void OnGUI() { if (GUI.Button(new Rect(0, 0, 200, 20), "FUCK")) { CallMethod(Fuck); } } private int StoreMethod(string name) { Lua.GetField(-1, name); if (!Lua.IsFunction(-1)) { throw new Exception(string.Format( "method {0} not found!", name)); } return Lua.L_Ref(LuaDef.LUA_REGISTRYINDEX); } private void CallMethod(int funcRef) { Lua.RawGetI(LuaDef.LUA_REGISTRYINDEX, funcRef); // insert `traceback' function var b = Lua.GetTop(); Lua.PushCSharpFunction(Traceback); Lua.Insert(b); var status = Lua.PCall(0, 0, b); if (status != ThreadStatus.LUA_OK) { Debug.LogError(Lua.ToString(-1)); } // remove `traceback' function Lua.Remove(b); } private static int Traceback(ILuaState lua) { var msg = lua.ToString(1); if (msg != null) { lua.L_Traceback(lua, msg, 1); } // is there an error object? else if (!lua.IsNoneOrNil(1)) { // try its `tostring' metamethod if (!lua.L_CallMeta(1, "__tostring")) { lua.PushString("(no error message)"); } } return 1; }}
fuck.lua
local function awake() print("---- awakefuck ----")endlocal function fuck()print("FUCK")endreturn {awake = awake,fuck = fuck,}
效果
0 0
- Unity3D C#调用UniLua
- Unity3D UniLua调用C#
- Unity3D UniLua的示例
- Unity3d 中使用Lua之UniLua
- [Unity3D]C# 调用C++ DLL
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新完全解读
- Unity3D教程:静态调用C#的dll
- unity3d 调用C#的dll文件
- 【转】Unity3D中C#与JS互相调用
- 如何在unity3D的C#中调用libsqlite3(完整代码)
- Unity3D中C#调用C++动态库总结
- Unity3D: JavaScript->C# 或 C#->JavaScript的调用
- Unity3D C# Thread通过JNI调用安卓接口出错
- Unity3D中js与C#之间相互调用的解决办法
- Unity3D中C#调用iOS的静态库(*.a)
- 关于C语言调用Unity3d C#函数的方法
- Unity3D中C#调用iOS的静态库(*.a)
- Unity3D开发小贴士(五)Lua调用C#
- iOS文档-UIView的基本属性
- 《Android开发卷——自定义日期选择器(三)》
- 在当前目录下查找查找包含指定内容的文件
- 使用puppet自动安装openstack
- 了解和入门注解的应用
- Unity3D C#调用UniLua
- 关于hql延时加载的问题
- 纯属个人扯淡
- media query相关表格
- 倒立
- <转>c#调用C++DLL类型转换
- Emacs基本配置 1 [转载]
- 2012蓝桥杯【初赛试题】 夺冠概率
- Build Instructions (Windows)