xLua入门基础

环境配置

github下载xLua文件

xLua是腾讯开发,据说比较先进;

下载下来后将Plugins和XLua文件夹考进项目;

Plugins多平台权限;XLua和C#交互;

test.lua文件中只写了一句print(Hello LittlePerilla);

运行Lua代码

运行xLua代码需要创建lua解释器,结束要释放解释器;

DoString是将字符串当成lua代码执行;

//lua解释器
LuaEnv luaenv = new XLua.LuaEnv(); //运行lua代码,字符串当lua代码执行;
luaenv.DoString("print('hello world!')"); //释放解释器
luaenv.Dispose();

运行C#代码

CS.为xLua中调用C#代码的关键字;

LuaEnv luaenv = new XLua.LuaEnv();

//运行lua代码,字符串当lua代码执行;
luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')"); luaenv.Dispose();

返回值

LuaEnv luaenv = new XLua.LuaEnv();

object[] data = luaenv.DoString("return 100, false");
Debug.Log($"{data[0]}__{data[1]}"); luaenv.Dispose();

自定义加载器

默认加载器路径为:steamingAssets;

LuaEnv luaenv = new LuaEnv();
//加载test.lua,这里的require是从默认加载器:steamingAssets中加载
luaenv.DoString("require('test')");
luaenv.Dispose();

自定义加载路径:

所有的lua脚本都放在Assets同级目录:DataPath\Lua;

xLua解释器中AddLoader方法;参数是一个委托;

public delegate byte[] CustomLoader(ref string filepath);

filepath这个path就是require(path)的参数;

通过委托返回.lua文件中所有的代码字节数据,提供给解释器调用;

public void MyLoader()
{
LuaEnv luaenv = new LuaEnv();
//自定义加载器,加入xlua的解析路径
//public delegate byte[] CustomLoader(ref string filepath);
luaenv.AddLoader(ProjectLoader); luaenv.DoString("require('test')");
luaenv.Dispose();
} //自定义加载器先于系统加载器;
//未加载到文件,返回空;
public byte[] ProjectLoader(ref string filepath)
{
string path = Application.dataPath;
path = path.Substring(0, path.Length - 6) + "DataPath/Lua/" + filepath + ".lua";
//读取文件为字节数组
if(File.Exists(path))
return File.ReadAllBytes(path);
else
{
Debug.Log("未找到路径文件");
return null;
}
}

xLua自定义加载器的更多相关文章

  1. Java类加载机制及自定义加载器

    转载:https://www.cnblogs.com/gdpuzxs/p/7044963.html Java类加载机制及自定义加载器 一:ClassLoader类加载器,主要的作用是将class文件加 ...

  2. Java 理解类加载过程 -- 自定义加载器

    类加载器可以看下我的收藏: https://www.cnblogs.com/dongguacai/p/5879931.html 现在准备一个字节码文件: 自定义加载器: package com.xzl ...

  3. KnockoutJS 3.X API 第六章 组件(5) 高级应用组件加载器

    无论何时使用组件绑定或自定义元素注入组件,Knockout都将使用一个或多个组件装载器获取该组件的模板和视图模型. 组件加载器的任务是异步提供任何给定组件名称的模板/视图模型对. 本节目录 默认组件加 ...

  4. JVM类加载(4)—加载器

    定义: 虚拟机设计团队把类加载阶段中“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称之为“类加载器 ...

  5. <JVM中篇:字节码与类的加载篇>04-再谈类的加载器

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  6. xlua的自定义加载

    具体可以先看xlua的自定义加载的demo,那个用lamda表达式做的 我这个更好理解 主要是ReadFile2的结构问题,必须的写成这样

  7. Flex 4 自定义预加载器

    本示例的目的是在Flash Professional里创建自定义预加载器SWC,并扩展SparkDownloadProgressBar类在Flex 4应用程序中使用.    预加载器显示加载进度百分比 ...

  8. 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)

    [SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...

  9. AMD加载器实现笔记(四)

    继续这一系列的内容,到目前为止除了AMD规范中config的map.config参数外,我们已经全部支持其他属性了.这一篇文章中,我们来为增加对map的支持.同样问题,想要增加map的支持首先要知道m ...

随机推荐

  1. Windows CMD .bat 批处理基础语法

    格式 @echo off 代码..... pause 不会逐行将命令打印. rem [注释] 关键字注释. :: [注释] 符号注释. echo 打印到控制台. >> 输出重定向.追加. ...

  2. python3使用pycuda执行简单GPU计算任务

    技术背景 GPU的加速技术在深度学习.量子计算领域都已经被广泛的应用.其适用的计算模型是小内存的密集型计算场景,如果计算的模型内存较大,则需要使用到共享内存,这会直接导致巨大的数据交互的运算量,通信开 ...

  3. ES6扩展——函数扩展之剩余函数

    1.结合扩展运算符 //剩余参数是做聚合的,扩展运算符是做展开的 function sum(...args){ console.log(arguments); console.log(argument ...

  4. netty系列之:自建客户端和HTTP服务器交互

    目录 简介 使用客户端构建请求 accept-encoding server解析HTTP请求 总结 简介 上一篇文章,我们搭建了一个支持中文的HTTP服务器,并且能够从浏览器访问,并获取到相应的结果. ...

  5. MySQL的主从复制步骤详解及常见错误解决方法

    mysql主从复制(replication同步)现在企业用的比较多,也很成熟.它有以下优点: 1.降低主服务器压力,可在从库上执行查询工作. 2.在从库上进行备份,避免影响主服务器服务. 3.当主库出 ...

  6. centos7 grep 的使用

    2021-07-29 grep(Global search Regular Expression and Print out the line) "Global search" 表 ...

  7. PXE预启动执行环境

    PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并 ...

  8. SpringMVC-源码-图解

  9. 20210719 noip20

    考场 后两题是原题,教练说不用写了(ycx 不讲武德) T1 先手模了 \(n\le5\) 的情况,尝试找规律失败.那就只能 DP 了,最终没搞出来. 记忆化搜索打了 \(n\le20\) 的表,交了 ...

  10. 使用easyui进行上左右布局

    在后台管理系统开发的过程中,上左右的布局是最常见的页面布局方式,现在我们来看看使用easyui这个jquery前端框架如何快速搭建一个可用的页面框架. 1.在页面中引入easyui所需的文件 1 &l ...