[2]自定义Lua解析方式

在上文中我们学会学会更改加载路径,加载对应文件夹下的Lua脚本。

默认解析加载的lua脚本存在的文件位置非AB包或者Resources文件夹下往往不能随包体更新,这显然不符合热更需要。因此自定义继承

tolua中lua脚本加载解析类LuaFileUtils来重写对应的lua脚本加载方法。

 public class LuaCustomLoad:LuaFileUtils
{
/// <summary>
/// 优先从AssetBundle中加载(默认AB文件名称为lua) Resources文件夹下lua文件夹加载
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public override byte[] ReadFile(string fileName)
{
//后缀名称检查处理
if (!fileName.EndsWith(".lua"))
{
fileName += ".lua";
}
//二进制文件流
byte[] buffer = null; //解析路径名称
string[] tempFilePath = fileName.Split('/');
Debug.Log(tempFilePath[tempFilePath.Length - 1]);
TextAsset luaText = LoadAssetBundleManager.Instance().LoadResource<TextAsset>("lua",tempFilePath[tempFilePath.Length - 1]);
if (luaText != null)
{
buffer = luaText.bytes;
}
//从Resources文件夹下加载Lua脚本
if (buffer == null)
{
Debug.Log("从Resources资源包中加载");
string filePath = "Lua/" + fileName;
//读取文件
TextAsset textAsset = Resources.Load<TextAsset>(filePath);
if (textAsset != null)
{
buffer = textAsset.bytes;
//卸载资源
Resources.UnloadAsset(textAsset);
}
}
return buffer;
}
}

将lua脚本打入Resorces文件夹下(.lua文件)

测试:此时还未将Lua脚本打入AssetBundle包 所以从Resources文件夹下加载lua脚本。(报错是因为AssetBundle文件不存在!后期可以完善此lua文件加载脚本逻辑)

现在我们将lua脚本打入AssetBundle中

此处踩坑:Lua脚本打入AB包失败!将lua脚本后缀添加 [.txt] ,打包之前将toLua脚本清空。

测试使用自定义脚本要点:

在使用LuaState之前先实例化自定义的加载方法:

这样,继承的LuaFileUtils的自定义类会调用其构造函数,将子类实例化的this赋值给instance,从而执行子类重写的ReadFile方法。

测试代码:

[2]自定义Lua解析方式的更多相关文章

  1. Android初级教程:Android中解析方式之pull解析

    在安卓中有很多种解析方式.按照大方向有xml解析和json解析.而,细致的分,xml和json解析各有自己的很多解析方式.今天这一篇主要介绍xml解析中的pull解析.对于xml的解析方式,我之前在j ...

  2. Android:XML简介 & 解析方式对比(DOM、SAX、PULL)

    目录   示意图 1. 定义 XML,即 extensible Markup Language ,是一种数据标记语言 & 传输格式 2. 作用 对数据进行标记(结构化数据).存储 & ...

  3. Spring Boot 学习系列(05)—自定义视图解析规则

    此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 自定义视图解析 在默认情况下Spring Boot 的MVC框架使用的视图解析ViewResolver类是C ...

  4. SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver)

    SpringBoot让你的Bean动起来(自定义参数解析HandlerMethodArgumentResolver) 简介 我们 Controller 用到的一些 Bean 需要通过一定的方式去获取的 ...

  5. 解析prototxt文件的python库 prototxt-parser(使用parsy自定义文件格式解析)

    解析prototxt文件的python库 prototxt-parser https://github.com/yogin16/prototxt_parser https://test.pypi.or ...

  6. 10.AutoMapper 之自定义值解析器(Custom Value Resolvers)

    https://www.jianshu.com/p/3e7cf1d1f17d 自定义值解析器(Custom Value Resolvers) 虽然AutoMapper涵盖了相当多的目标成员映射方案,但 ...

  7. springmvc 源码分析(三) -- 自定义处理器映射器和自定义处理器适配器,以及自定义参数解析器 和错误跳转自定页面

    测试环境搭建: 本次搭建是基于springboot来实现的,代码在码云的链接:https://gitee.com/yangxioahui/thymeleaf.git DispatcherServlet ...

  8. 【Java EE】Day12 XML、约束(DTD、Schema)、解析方式、Jsoup、选择器(Selector、XPath)

    一.XML介绍 1.概述 Extensible Markup Language--可扩展标记语言 标记语言 :标签构成 可扩展:可以自定义标签 2.功能 存储数据 作为配置文件使用 作为数据载体在网络 ...

  9. Spring自定义参数解析器设计

    作者:京东零售 王鹏超 1.什么是参数解析器 @RequstBody.@RequstParam 这些注解是不是很熟悉? 我们在开发Controller接口时经常会用到此类参数注解,那这些注解的作用是什 ...

  10. iOS - 分析JSON、XML的区别和解析方式的底层是如何实现的(延伸实现原理)

    <分析JSON.XML的区别,JSON.XML解析方式的底层是如何实现的(延伸实现原理)> (一)JSON与XML的区别: (1)可读性方面:基本相同,XML的可读性比较好: (2)可扩展 ...

随机推荐

  1. #轮廓线dp#洛谷 1879 [USACO06NOV]Corn Fields G

    题目 分析 考虑状压dp在\(n\leq 21\)的情况下会TLE, 设\(dp[n][m][S]\)表示当前正在处理\((n,m)\)这个格子 并且轮廓线状态为\(S\)的方案数, 考虑可行状态最多 ...

  2. #01背包#洛谷 4161 [SCOI2009]游戏

    题目 将 \(n\) 拆成若干个正整数的和, 问这些正整数的LCM有多少种 \(n\leq 10^3\) 分析 考虑这个\(LCM\)一定是1或者由若干个质数的指数幂相乘得到的, 那么可以设\(dp[ ...

  3. #网络流,树状数组#JZOJ 4020 Revolution with JZOJ 4018 Magic

    CF297E Mystic Carvings=JZOJ 4018 Magic JZOJ 4020 Revolution 题目 有一个\(n*m(n,m\leq 20)\)的网格图 这格子有收益当且仅当 ...

  4. C++ 编程入门指南:深入了解 C++ 语言及其应用领域

    C++ 简介 什么是 C++? C++ 是一种跨平台的编程语言,可用于创建高性能应用程序. C++ 是由 Bjarne Stroustrup 开发的,作为 C 语言的扩展. C++ 为程序员提供了对系 ...

  5. skywalking源码流程

    我们已经知道skywalking的入口就是premain方法: public static void premain(String agentArgs, Instrumentation instrum ...

  6. JS从图片base64数据中获取图片的宽高

    // js从base64数据中获取宽高 var image = new Image(); image.src = "data:image/png;base64," + base64 ...

  7. Ubuntu部署Django三:编写相关配置文件及启动服务

    1. uwsgi 1.1 项目结构如下,你要知道 uwsgi.ini 放在什么位置 projectName |-- app |-- projectName |-- -- wsgi.py |-- -- ...

  8. 新一期HarmonyOS认证正式发布,速来围观!

    原文:https://mp.weixin.qq.com/s/mvXLnJM9VKTyq8mi9BfY1w,点击链接查看更多技术内容.   华为认证HarmonyOS应用开发高级工程师HCIP-Harm ...

  9. jenkins 持续集成和交付——pipeline(五)

    前言 整理一下pipeline. 正文 介绍 什么是pipeline呢? 根据前面的所得,我们知道,以前都是模板形式,但是如果有些复杂的项目,需要用更加自定义的写法,那么就有了pipeline,也就是 ...

  10. 【笔记】Oracle列转行unpivot&行转列 PIVOT

    unpivot 说明:将表中多个列缩减为一个聚合列(多列转多行) 语法:unpivot(新列名 for 聚合列名 in (对应的列名1-列名n )) 写到了一个力扣的题,发现这个unpivot函数还没 ...