Unity3D学习之Lua热更新解决方案(二)XLua

文章目录

  • 1 XLua概述
  • 2 xLua导入和AB包相关准备
  • 3 C#调用Lua
    • 3.1 Lua解析器
    • 3.2 文件加载重定向
    • 3.3 Lua解析器管理器
      • 3.3.1 重定向AB包内的Lua
      • 3.3.2 获得_G大表
    • 3.4 全局变量的获取
    • 3.5 全局函数的获取
      • 3.5.1 无参无返回
      • 3.5.2 有参有返回
      • 3.5.3 多返回值
      • 3.5.4 变长参数
    • 3.6 List和Dictionary映射table
      • 3.6.1 同一类型List
      • 3.6.2 不指定类型List
      • 3.6.3 指定类型的Dic
      • 3.6.4 不指定类型的Dic
    • 3.7 类映射table
      • 3.7.1 类中的类
    • 3.8 接口映射table
    • 3.9 LuaTable映射table
  • 4 Lua使用C#类
    • 4.1 在Main函数中调用Lua脚本
    • 4.2 调用类
      • 4.2.1 调用C#类
    • 4.3 自定义类
    • 4.4 继承了MONO的类
  • 5 Lua使用C#枚举
    • 5.1 自带枚举
    • 5.2 自定义枚举
  • 6 Lua使用C#数组、list、Dictionary
    • 6.1 数组
    • 6.2 List
    • 6.3 Dictionary
    • 6.4 Lua使用C#拓展方法
  • 7 Lua使用C# ref和out函数
    • 7.1 Ref
    • 7.2 Out
    • 7.3 ref和out
  • 8 Lua使用C#重载函数
  • 9 Lua使用C#委托和事件
    • 9.1 委托
    • 9.2 事件
  • 10 Lua使用C#二维数组
  • 11 Lua使用C#的null和nil比较
  • 12 Lua和系统类及委托相互使用
  • 13 Lua使用C#协程
  • 14 Lua使用C#泛型函数


1 XLua概述

在这里插入图片描述

在资源服务器下载

在这里插入图片描述
下载完成后放入游戏客户端
在这里插入图片描述

2 xLua导入和AB包相关准备

Github 搜索 Xlua
在这里插入图片描述
在这里插入图片描述
拖入到unity项目中
在这里插入图片描述
导入AB包
在这里插入图片描述

3 C#调用Lua

3.1 Lua解析器

在这里插入图片描述

Require会自动调用resources文件夹的内容,但由于unity不能读取.lua后缀的文件
所以使用.txt的后缀
在这里插入图片描述
会在resources文件夹里被自动识别为
在这里插入图片描述

3.2 文件加载重定向

创建一个Lua文件夹,在里面放入后缀为.lua的文件
在这里插入图片描述

在这里插入图片描述
addLoader相当于加一个委托
在这里插入图片描述

在这里插入图片描述

3.3 Lua解析器管理器

在这里插入图片描述
添加函数进行调用XLua
初始化LuaEnv,加载Lua脚本重定向

在这里插入图片描述

在这里插入图片描述

3.3.1 重定向AB包内的Lua

AB包.lua不能识别,所以要把.lua改成txt
准备一个Lua包
在这里插入图片描述
创建加载指定ab包的函数

在init中新加委托
在这里插入图片描述
在这里插入图片描述
优化流程,和博客(一)中的ab包管理器联动
lua只能同步加载,不能异步加载

在这里插入图片描述
优化方法,让执行lua语句不需要加上require

在这里插入图片描述

3.3.2 获得_G大表

在这里插入图片描述

3.4 全局变量的获取

启动脚本Main,在Main中调用其他脚本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
通过c#无法获取本地变量

在这里插入图片描述

3.5 全局函数的获取

在这里插入图片描述

在这里插入图片描述

3.5.1 无参无返回

在这里插入图片描述

在这里插入图片描述

3.5.2 有参有返回

如果是自定义委托
在这里插入图片描述
需要生成脚本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其他委托

在这里插入图片描述

3.5.3 多返回值

用out接
在这里插入图片描述

会返回第一个值,剩下的值使用 out接

在这里插入图片描述

在这里插入图片描述
用ref接
在这里插入图片描述
在这里插入图片描述

3.5.4 变长参数

在这里插入图片描述
在这里插入图片描述

3.6 List和Dictionary映射table

在这里插入图片描述

3.6.1 同一类型List

在这里插入图片描述

在这里插入图片描述

3.6.2 不指定类型List

在这里插入图片描述
在这里插入图片描述

3.6.3 指定类型的Dic

在这里插入图片描述

3.6.4 不指定类型的Dic

在这里插入图片描述

3.7 类映射table

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.7.1 类中的类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.8 接口映射table

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
如果用接口来接Get的内容,需要使用
在这里插入图片描述
然后编译
接口是引用拷贝

嵌套和类一样

3.9 LuaTable映射table

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 Lua使用C#类

4.1 在Main函数中调用Lua脚本

Lua没办法直接访问C# 一定从C# 调用Lua脚本后才把逻辑给Lua编写
在这里插入图片描述

4.2 调用类

4.2.1 调用C#类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 自定义类

在这里插入图片描述
在这里插入图片描述

4.4 继承了MONO的类

在这里插入图片描述
在这里插入图片描述

5 Lua使用C#枚举

5.1 自带枚举

在这里插入图片描述

5.2 自定义枚举

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6 Lua使用C#数组、list、Dictionary

6.1 数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2 List

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3 Dictionary

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

6.4 Lua使用C#拓展方法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
建议在Lua中要使用的类都加上该特性 可以提升性能

7 Lua使用C# ref和out函数

7.1 Ref

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
Ref函数不传完,默认补充为0

7.2 Out

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

7.3 ref和out

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

8 Lua使用C#重载函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9 Lua使用C#委托和事件

9.1 委托

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9.2 事件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10 Lua使用C#二维数组

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

11 Lua使用C#的null和nil比较

在这里插入图片描述
可以自己写一个公共方法
在这里插入图片描述
还可以在C# 中加扩展方法

在这里插入图片描述

在这里插入图片描述

12 Lua和系统类及委托相互使用

无法为系统类或者第三方库代码加上[CsharpCallLua] 和 [LuaCallCsharp]
在这里插入图片描述
会报错
会提示需要给委托加特性 [LuaCallCsharp]
在这里插入图片描述
然后生成xlua的代码
在这里插入图片描述
[LuaCallCSharp]也是一样的
在这里插入图片描述

13 Lua使用C#协程

在这里插入图片描述
调用 xlua.util 把Lua函数转成Coroutine
在这里插入图片描述
关闭线程
在这里插入图片描述

14 Lua使用C#泛型函数

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/423799.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

策略模式 详解 设计模式

策略模式 策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装到具有共同接口的独立类中,并且使它们可以相互替换。 策略模式可以让算法的变化独立于使用算法的客户端。 主要解决: 在有多种算法相似的情况下&#…

Linux系统管理:虚拟机 Kali Linux 安装

目录 一、理论 1.Kali Linux 二、实验 1.虚拟机Kali Linux安装准备阶段 2.安装Kali Linux 2. Kali Linux 更换国内源 3. Kali Linux 设置固定IP 4. Kali Linux 开启SSH远程连接 5. MobaXterm远程连接 Kali Linux 三、问题 1.apt 命令 取代哪些 apt-get命令 一、理论…

Linux文本处理三剑客:awk

在Linux操作系统中,grep、sed、awk被称为文本操作“三剑客”,上两期中,我们将详细介绍grep、sed的基本使用方法,希望能够帮助到有需要的朋友,现在,我们继续学习awk。 虽然awk是一个Linux中常见的命令&…

C 嵌入式系统设计模式 17:静态优先级模式

本书的原著为:《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》,讲解的是嵌入式系统设计模式,是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式并发和资源管理模式之三…

Slicer学习笔记(六十五) 3DSlicer的医学图像数据增强扩展模块

1. 医学图像数据增强扩展模块 基于3D Slicer5.1.0 编写了一个测试医学图像的数据增强测试扩展模块。 扩展模块名:DataAugementation 项目地址:DataAugmentation 下载该项目后,可以将该扩展模块添加到3D Slicer的扩展中。 关于如何给3DSlicer…

【STA】多场景时序检查学习记录

单周期路径 建立时间时序检查 在时钟的有效沿到达触发器之前,数据应在一定时间内保持稳定,这段时间即触发器的建立 时间。满足建立时间要求将确保数据可靠地被捕获到触发器中。 建立时间检查是从发起触发器中时钟的第一个有效沿到捕获触发器中时钟后面…

萌新学习RSA第一天

文章来自NSSCTF工坊Xenny的课程 1.非对称加密 2.介绍RSA来源(三位数学家名字开头) 3.RSA数学基础 4.算法实现 from Crypto.Util.number import * #这个是关于RSA很多函数的库 p getPrime(512) #111RSA第一步:生成随机的51…

Sora学习(一):Sora技术路径整体认知

前文:最近跟着DataWhale组队学习这一期“Sora原理与技术实战”,本篇博客主要是基于DataWhale成员、厦门大学平潭研究院杨知铮研究员分享的Sora技术原理详解课件内容以及参考网上一些博客资料整理而来(详见文末参考文献)&#xff0…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:禁用控制)

组件是否可交互,可交互状态下响应点击事件、触摸事件、拖拽事件、按键事件、焦点事件和鼠标事件。 说明: 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 enabled enabled(value: boolean) 设置组…

持续集成(CICD)- Git版本管理工具,Gitee线上仓库

文章目录 一、学习目标:二、什么是Git工具三 、Git环境搭建(windows系统)四、Gitee设置(私钥和公钥绑定)五、Git结合Gittee进行基本设置(重要)六、在Gitee上新建仓库私有仓库(非空仓库)七、Git拉取线上仓库代码,提交代码(重要)八、Git解决版本冲突问题(重要)场景一…

第二讲:用geth和以太坊交互

一:安装geth brew install ethereum geth github网址: https://github.com/ethereum/go-ethereum 二: 用geth连接以太坊 以太坊有主网络(Ethereum Mainnet),有测试网络(Sepolia、Goerli 等等…

leetcode 热题 100_盛最多水的容器

题解一: 双指针遍历:容量计算公式为min(左高度,右高度)*底部距离,我们可以令底部距离逐步递减(左右两边的指针向中部移动)。此时对于min(左高度,右高度),假设较高的线向中部移动&…

如何修炼成“神医”——《OceanBase诊断系列》之一

本系列是基于OcenaBase 开发工程师在工作中的一些诊断经验,也欢迎大家分享相关经验。 1. 关于神医的故事 扁鹊,中国古代第一个被正史记载的医生,他的成才之路非常传奇。年轻时,扁鹊是一家客栈的主管。有一位名叫长桑君的客人来到…

HTTPS的实现原理

图片来源:HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 - 个人文章 - SegmentFault 思否 加密流程按图中的序号分为: 客户端请求 HTTPS 网址,然后连接到 server 的 443 端口 (HTTPS 默认端口,类似于 HTTP 的80端口)。…

小程序和页面生命周期详解

目录 小程序的生命周期 创建(onLoad): 显示(onShow): 隐藏(onHide): 卸载(onUnload): 错误监听(onError)…

使用最新Hal库实现USART中断收发功能(STM32F4xx)

目录 概述 1 认识STM32F4XX的USART 1.1 USART 功能说明 1.2 USART的中断 1.3 USART 模式配置 1.4 USART的寄存器 2 使用STM32CubeMX 生成工程 2.1 配置参数 2.2 生成工程代码 3 实现软件功能 3.1 软件功能介绍 3.2 认识USART Hal库 3.2.1 初始化函数组 3.2.2 发送…

66-ES6:var,let,const,函数的声明方式,函数参数,剩余函数,延展操作符,严格模式

1.JavaScript语言的执行流程 编译阶段:构建执行函数;执行阶段:代码依次执行 2.代码块:{ } 3.变量声明方式var 有声明提升,允许重复声明,声明函数级作用域 访问:声明后访问都是正常的&…

殿堂级Flink源码极精课程预售

一、为什么我们要读源码? 1、让个人技术快速成长: 优秀的开源框架,底层的源码设计思想也非常优秀,同时还有含有大量的设计模式和并发编程技术,优秀的解决方案,熟读源码对猿们技术提升有很大帮助 2、新技术学习能力: Java开源码框架的源码熟读后,若出现…

挑战杯 基于机器视觉的车道线检测

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 🔥 优质竞赛项目系列,今天要分…

Doris实战——银联商务实时数仓构建

目录 前言 一、应用场景 二、OLAP选型 三、实时数仓构建 四、实时数仓体系的建设与实践 4.1 数仓分层的合理规划 4.2 分桶分区策略的合理设置 4.3 多源数据迁移方案 4.4 全量与增量数据的同步 4.5 离线数据加工任务迁移 五、金融级数仓稳定性最佳实践 5.1 多租户资…