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

news2024/9/23 15:19:10

文章目录

  • 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#泛型函数

在这里插入图片描述

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C 嵌入式系统设计模式 18:临界区模式

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

【AIGC】OpenAI推出王炸级模型sora,颠覆AI视频行业(2024)

对于OpenAI推出的Sora模型,我们可以进一步探讨其可能的技术细节、潜在应用以及对AI视频行业的影响。 点击以下任一云产品链接,跳转后登录,自动享有所有云产品优惠权益: 经过笔者亲测,强烈推荐腾讯云轻量应用服务器作…

前端打包部署(黑马学习笔记)

我们的前端工程开发好了,但是我们需要发布,那么如何发布呢?主要分为2步: 1.前端工程打包 2.通过nginx服务器发布前端工程 前端工程打包 接下来我们先来对前端工程进行打包 我们直接通过VS Code的NPM脚本中提供的build按钮来完…

Http基础之http协议、无状态协议、状态码、http报文、跨域-cors

Http基础 HTTP基础HTTP协议请求方法持久连接管线化 无状态协议使用Cookie状态管理 状态码1XX2XX OK200 OK204 NO Content206 Content-Range 3XX 重定向301302304307 4XX400401403404 5XX500503 HTTP报文请求报文响应报文通用首部字段Cache-ControlConnectionDate请求首部字段Ac…

Python编程小案例—利用flask查询本机IP归属并输出网页图片

Python编程小案例—利用flask查询本机IP归属并输出网页图片 环境:Pycharm Mac OS 源码如下: from flask import Flask, render_template, requestapp Flask(__name__)app.route(/) def index():return render_template(IP查询.html)if __name__ __…

还在用Jenkins?快来试试这款简而轻的自动部署软件!

最近发现了一个比 Jenkins 使用更简单的项目构建和部署工具,完全可以满足个人以及一些小企业的需求,分享一下。 Jpom 是一款 Java 开发的简单轻量的低侵入式在线构建、自动部署、日常运维、项目监控软件。 日常开发中,Jpom 可以解决下面这些…

STM32 DMA入门指导

什么是DMA DMA,全称直接存储器访问(Direct Memory Access),是一种允许硬件子系统直接读写系统内存的技术,无需中央处理单元(CPU)的介入。下面是DMA的工作原理概述: 数据传输触发&am…

venv、pip、conda、anaconda、miniconda的区别和优缺点,和彻底清除python多余的环境

virtualenv(venv) 这是一个虚拟环境管理器,它可以让你每个项目甚至每个脚本配置一个自定义的Python解释器环境,这最大的好处是我可以不污染开发环境。​ pip pip 是 Python 最常用的包管理器,它能自动处理依赖 。 conda 如果说venv是虚拟…

5、DVWA代码审计(2)

一、csrf 1、csrf(low) 限制 复现 GET /vulnerabilities/csrf/?password_new123456&password_conf123456&ChangeChange HTTP/1.1 Host: ddd.com Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,…

探索数据宇宙:深入解析大数据分析与管理技术

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…

迪杰斯特拉算法的具体应用

fill与memset的区别介绍 例一 #include <iostream> #include <algorithm> using namespace std; const int maxn500; const int INF1000000000; bool isin[maxn]{false}; int G[maxn][maxn]; int path[maxn],rescue[maxn],num[maxn]; int weight[maxn]; int cityn…

Linux内存地址空间

目录 一、虚拟地址空间 1.虚拟地址空间的定义 2.虚拟地址空间的布局 二、内存壁垒 1.内存壁垒的定义​编辑 2.段错误 三、内存映射的建立与解除 &#xff08;1&#xff09;mmap &#xff08;2&#xff09;munmap &#xff08;3&#xff09;堆内存的分配和释放 1.sbrk …

一文掌握大模型提示词技巧:从战略到战术

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【c++】构造函数(下)——初始化列表

Hello,everybody!构造函数的内容比较多&#xff0c;语法还有些复杂。我分成了两篇文章进行讲解&#xff0c;大家在看过构造函数(上)后再来看这篇文章更容易理解哟&#xff01; 1.初始化列表的格式 类似这种格式&#xff0c;在初始化列表中第一行用冒号开头&#xff0c;剩下的用…

无线通信中AM,FM,PM与之相关的调制类型说明,例如F2D,F1W,F3E等

常见例子&#xff1a; 广播 A3E或A3E G 普通幅度调制用于低频和中频AM广播F8E&#xff0c;F8E H 用于VHF上的无线电传输的FM广播&#xff0c;以及模拟电视传输的音频分量。 由于通常使用用于立体声和RDS的导频音&#xff08;子载波&#xff09;&#xff0c;使用指示符“8”…

C++ 原子变量

概述 C中原子变量&#xff08;atomic&#xff09;是一种多线程编程同步机制&#xff0c;它能够确保对共享变量的操作在执行时不会被其他线程的操作干扰&#xff0c;atomic是提供一种生成原子操作数的一种机制&#xff0c;避免竞态条件(race condition)和死锁(deadlock)等问题。…

生成式AI与仿真

仿真模型是物理对象、系统或过程的虚拟表示&#xff0c;可预测其在不同场景中的行为和性能。 如今&#xff0c;仿真模型广泛应用于各行各业&#xff0c;以优化流程、为决策提供信息并创建数字孪生。 几十年来&#xff0c;仿真模型一直被用来对复杂的系统和过程进行建模。 这些…

Python 编辑工具 Jupyter notebook

Jupyter notebook Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算&#xff1a;开发、文档编写、运行代码和展示结果。——Jupyter Notebook官方介绍 官网&#xff1a;Project Jupyter | Home Jupyter Notebook 是一个开源的交互式计算环境&#…

selenium爬虫

方法选择和安装包 在动态网页并且登陆过程中不需要进行过于复杂的密码验证的时候使用selenium会非常的方便 安装准备过程也相对简单&#xff1a; 下载对应版本的chromedriver并且通过如下代码找到路径下载到python所在的目录&#xff1a; import sysprint(sys.executable) …

技巧 文本编辑器 B列每一行数据换行合并到A列中

一. 需求背景 ⏹A列是我们制作的日文版歌词&#xff0c;B列是中文版译文歌词 现在想让B列的每一行歌词&#xff0c;按下图箭头所示插入到A列的每一行后面 二. 通过文本编辑器的替换功能解决 将Excel中的A和B列的数据复制粘贴到文本编辑器中Excel中的列和列之前是通过Tab来分隔…