[3]自定义Lua解析器管理器-------演化脚本V0.5

方便我们在项目中使用Lua解析方法,我们封装管理一个lua解析器,管理LuaState的方法执行。

解析器脚本:

using LuaInterface;

namespace BaseFramework
{
/// <summary>
/// 自定义的toLua解析器
/// </summary>
public class CallLuaManager:SingletonAutoMono<CallLuaManager>
{
private LuaState _luaState;
/// <summary>
/// 供外部获取使用的属性
/// </summary>
public LuaState LuaState
{
get
{
return _luaState;
}
} public void Init()
{
_luaState = new LuaState();
_luaState.Start();
//初始化委托工厂
DelegateFactory.Init();
} public void Require(string fileName)
{
_luaState.Require(fileName);
} public void Dispose()
{
if(_luaState==null)
return;
_luaState.CheckTop();
_luaState.Dispose();
_luaState = null;
}
}
}

我们开始测试使用,其主要完成对Lua脚本中的全局变量的获取并赋值,Lua脚本中的无参无返回值函数调用、有参有返回值函数的四种方式调用,熟悉相关的API ,可以自行运行学习

using System;
using BaseFramework;
using LuaInterface;
using UnityEngine;
using UnityEngine.Events; namespace CallLua
{
public class CallLuaEntrance:MonoBehaviour
{
private void Start()
{
CallLuaManager.Instance().Init();
CallLuaManager.Instance().Require("Main");
//获取全局变量
Debug.Log(CallLuaManager.Instance().LuaState["string1"]);
//无法获取lua脚本中的局部变量
CallLuaManager.Instance().LuaState["string1"] = "我被修改了!";
Debug.Log(CallLuaManager.Instance().LuaState["string1"]);
//可以理解LuaState中存储的所有全局变量列表
//如果有则可以查看并修改
//如果没有则新建
CallLuaManager.Instance().LuaState["newGloString"] = "我是新来的,是Lua全局变量"; //获取执行无参无返回值的lua函数
LuaFunction luaFunction = CallLuaManager.Instance().LuaState.GetFunction("testFunc");
luaFunction.Call();
luaFunction.Dispose(); //直接获取
luaFunction = CallLuaManager.Instance().LuaState["testFunc"] as LuaFunction;
luaFunction.Call();
luaFunction.Dispose(); //存入委托中再使用
luaFunction = CallLuaManager.Instance().LuaState.GetFunction("testFunc");
UnityAction action = luaFunction.ToDelegate<UnityAction>();
action(); //-------------------------------------------------------------------------------------------------
//有参有返回值函数获取调用 方式1
luaFunction = CallLuaManager.Instance().LuaState.GetFunction("testFunc1");
luaFunction.BeginPCall();
luaFunction.Push(66);
luaFunction.PCall();
int res = (int)luaFunction.CheckNumber();
Debug.Log("参数为"+66+" ,返回值为"+res);
luaFunction.EndPCall(); //通过函数的Invoke方法来调用 方式2
//<参数类型,返回值类型>
res = luaFunction.Invoke<int, int>(88);
Debug.Log("参数为"+88+" ,返回值为"+res); //通过委托调用 方式3
Func<int, int> func = luaFunction.ToDelegate<Func<int, int>>();
res = func(99);
Debug.Log("参数为"+99+" ,返回值为"+res); //通过解析器直接调用 方式4 和2本质上是一样的掉用方式
res = CallLuaManager.Instance().LuaState.Invoke<int, int>("testFunc1", 166, true);
Debug.Log("参数为"+166+" ,返回值为"+res); CallLuaManager.Instance().Dispose();
}
}
}

其调用的lua测试脚本------Main.lua 放置在Lua文件夹下

--主入口函数。从这里开始lua逻辑
function Main()
print("logic start")
end Main()
--场景切换通知
function OnLevelWasLoaded(level)
collectgarbage("collect")
Time.timeSinceLevelLoad = 0
end --全局变量
string1 = "我是全局变量" function testFunc()
print("无参无返回值函数调用成功!")
end
--有参数有返回值的函数
function testFunc1(a)
return a + 100
end function OnApplicationQuit() end

自定义Lua解析器管理器-------演化脚本V0.5的更多相关文章

  1. WinServer-服务器管理器-从入门到放弃

    WIN7 远程服务器管理工具 看看这篇帖子,他们说可以在WIN7上通过服务器管理工具来管理服务器上的软件 https://social.technet.microsoft.com/Forums/zh- ...

  2. Django Managers管理器

    Managers class Manager 管理器是向Django模型提供数据库查询操作的接口.Django应用程序中每个模型至少有一个管理器. Manager names 默认情况下管理器的名字为 ...

  3. with和上下文管理器

    with和上下文管理器 如果你有时间阅读源码的习惯,可能会看到一些优秀的代码会出现带有with关键字的语句. 对于系统资源如文件,数据库连接,socket而言,应用程序打开这些资源并执行完业务逻辑之后 ...

  4. [2016-07-15]nuget包管理器控制台下的powershell脚本介绍

    博客有阵子没打理了,今天刚恢复样式,但是标题还是不太正常,总算能凑合看看. 回到正题,最近为了能在VS的程序包管理器控制台上能方便的自定义ps脚本去调整project的package,就开始看powe ...

  5. [转帖]油猴脚本管理器 Tampermonkey v4.8 离线CRX安装包(谷歌浏览器版)

    https://www.52pojie.cn/thread-1010604-1-1.html 油猴脚本管理器 Tampermonkey v4.8 离线CRX安装包(谷歌浏览器版) 链接:https:/ ...

  6. 一款备受欢迎的用户脚本管理器插件TampermonKey-油猴脚本管理器安装与使用

    Tampermonkey简介 Tampermonkey是一款备受欢迎的浏览器扩展和用户脚本管理器,它适用于目前各种主流浏览器. 方便的脚本管理(正在运行的脚本和可以运行的脚本在图标处显示一览无余) 脚 ...

  7. nuget包管理器控制台下的powershell脚本介绍

    http://personball.com/powershell/2016/07/15/powershell-tips 定制自己的powershell,减少重复工作 安装一系列自己的常用nuget包 ...

  8. [置顶] Android布局管理器 - 详细解析布局实现

    布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以适配不同手机屏幕的分辨率,尺寸大小; 布局管理器之间的继承关系 : 在上面的UML图中可以看出, 绝对布局 帧布局 网格布局 相 ...

  9. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  10. 【Android 应用开发】AndroidUI设计之 布局管理器 - 详细解析布局实现

    写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器 ...

随机推荐

  1. 巧用dblink 实现多进程并行查询

    概述 对于分区表的大数据统计分析,由于数据量巨大,往往需要采用并行.但是数据库并行的效率相比分进程分表统计还是有比较大的差距.本文通过巧用dblink,实现分进程分分区统计数据. 例子 kingbas ...

  2. 算法学习笔记【6】| KMP 算法

    KMP(Knuth-Morris-Pratt字符串查找算法) KMP 算法是可以快速在文本串 s 中找到模式串 a 的算法. Part 1:幼稚的算法 首先思考我们在暴力匹配模式串时的思路: < ...

  3. #树形dp,二分#UVA1407 Caves 洛谷 3698 [CQOI2017]小Q的棋盘

    题目 给定一棵树,现在需要找到一条由节点1出发长度为\(x\)的路径, 问最多经过的节点数,重复经过只计算一次(不一定是简单路径) UVA的那道题多组数据多组询问,边权还不一定是1,\(n\leq 5 ...

  4. 2022 OpenHarmony年度运营报告

  5. 玩转OpenHarmony PID:教你打造两轮平衡车

    简介 此次为大家带来的是OpenAtom OpenHarmony(以下简称"OpenHarmony")系统与PID控制算法相结合并落地的平衡车项目. PID控制算法是一种经典的,并 ...

  6. OpenHarmony 3.2 Beta1版本正式发布

    5 月 31 日,开放原子开源基金会正式发布 OpenAtom OpenHarmony(以下简称"OpenHarmony")3.2 Beta1 版本.   全球开发者可通过Gite ...

  7. jenkins安装卸载和下载

    环境 :docker容器 卸载 jenkins 1.rpm卸载rpm -e jenkins 2.检查是否卸载成功rpm -ql jenkins 3.彻底删除残留文件:find / -iname jen ...

  8. 【编译原理】Antlr 入门使用

    前面文章我们学习了编译器前端的词法和语法分析工具,本篇我们来看看如何借助 Antlr 工具,快速生成词法和语法分析代码. 一.安装 mac 环境: 1)安装 brew install antlr 2) ...

  9. 插入排序的基本实现【数据结构与算法—TypeScript 实现】

    笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 概念 本质:将数列分为已排序和未排序,将未排序中的元素插入到已排序中的合适位置 特性 复杂度分析 时间复杂度: 最好情况 ...

  10. HarmonyOS极客松“上分秘籍”! 高手们顶峰相见!

      HarmonyOS 极客马拉松2023 火热进行中,我们期待与各位开发者相聚一起,践行极客精神,创造无限可能! 我们鼓励各位极客们自由组队,挥洒创意,用HarmonyOS 探索移动应用和服务的更多 ...