xlua基础

C#与XLua的交互基础 持续补充,欢迎大佬直接教学 主要参考文档:https://blog.youkuaiyun.com/xmx5166/article/details/90712888 C#调用XLua LuaEnv.DoString("require'LuaScript'");//直接加载Lua脚本,需要放在Resources文件夹下 LuaEnv.DoString("luaCode");//直接敲代码 LuaEnv.DoFile("filePath");//执行filePath下的XLua脚本 LuaEnv.Global.Get&lt 阅读详情

1.helloworld
 LuaEnv luaenv = new LuaEnv();
        luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')");
        luaenv.Dispose();

2.通过loader引用文件夹里面的lua程序 

 require引用resurces文件夹的程序

LuaEnv evn = new LuaEnv();              //构造虚拟机
        //evn.DoString(ta.text);
        evn.DoString("require 'helloLua'");                           //相当于using,会引用并执行(loader)但还是得放在resurces文件夹
        evn.Dispose();

 自定义loader
void Start () {
        LuaEnv env = new LuaEnv();
        env.AddLoader(myLoader);                        //自定义loader方法
        env.DoString("require 'luadiy'");               //执行lua类或者语句      
        env.Dispose();
	}
	
    private byte[] myLoader(ref string filePath)        //先用自定义的loader去加载,返回输出字节数组,如果没有返回则会调用下个load继续加载
    {
        print(filePath);               //文件名
        string str = Application.dataPath + "/xxx/" + filePath + ".lua.txt";
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(str));       //用资源读取类读取这个目录文件(lua类),转换为字节流数组
        //string s = "print(123)";
        return null;                                                            //返回(类)给想要执行的lua程序
        //return System.Text.Encoding.UTF8.GetBytes(s);
    }

3.csCallLua

1.全局变量直接用Global.Get
//double a= evn.Global.Get<double>("a");
        //string b = evn.Global.Get<string>("b");
        //bool c = evn.Global.Get<bool>("x");
 2.访问table
 1.通过class,但是相当于拷贝,不能改变lua代码中的值
person={v1="a",v2="wd",22,"str"				
}
										--[不允许加额外的逗号
function person:eat(a,b)				--function person.eat(person,a,b)不采用冒号的话要把自身当成第一个参数传递;
	print(a+b)
end
//class person                              //通过类调用只是拷贝,无法修改lua里面的值。反之也不行
    //{
    //    public string v1;
    //    public string v2;
    //}
//person p = evn.Global.Get<person>("person");
        //print(p.v1 + p.v2);
        //p.v1 = "cnm";
        //evn.DoString("print(person.v1)");
        //p.eat(3,4);
        // p.vv(3, 4);
 2,通过接口interface,需添加
    [CSharpCallLua] 特性
//[CSharpCallLua]
    //interface person                            //通过接口相当于是引用可以改变lua里面的值
    //{
    //    string v1 { get; set; }
    //    string v2 { get; set; }
    //    void eat(int a,int b);                  //函数名字必须和lua一致
    //    //void vv(int a,int b);
    //}
 3.通过字典或者数组,只能找到有key或者没有key的
//Dictionary<string,object> obj = evn.Global.Get<Dictionary<string,object>>("person");    //轻量级可以使用字典或者数组
        //foreach(string key in obj.Keys)
        //{

        //    print(key + "-" + obj[key]);
        //}

        //List<object> lst = evn.Global.Get<List<object>>("person");
        //foreach (object j in lst)
        //{
        //    print(j);
        //}
 4,通过内置luatable
//LuaTable tab = evn.Global.Get<LuaTable>("person");                                      //通过内置luatable来接收
        //print(tab.Get<string>("v1"));

3,访问function

1.用Action映射到delegate
//Action as1 = evn.Global.Get<Action>("add");                                           //委托与对应(代理)把lua函数映射到delegate
        //as1();
        //as1 = null;
2,自定义委托
[CSharpCallLua]                                                                             //委托必加特性,自定义委托
    delegate int Add(int a, int b,out int c);
//映射到delegate
        ////Add as2 = evn.Global.Get<Add>("add");
        ////int c1;
        ////int fann1=as2(20, 20,out c1);                                                           //lua中多返回值可以用out,ref 接收
        ////print(c1+"-"+fann1);
        ////as2 = null;
3,映射到LuaFunction,和luatable效率慢
LuaFunction func = evn.Global.Get<LuaFunction>("add");
        object[] os = func.Call(1, 2);
        foreach(object o in os)
        {
            print(o);
        }

4,luaCallCs

 先在cs引用lua程序
CS.UnityEngine.GameObject('first')   			--CS加命名空间加上类名
												--访问静态方法,通过类来调用
local gameObject=CS.UnityEngine.GameObject;		--先用局部变量引用类名,之后再用局部变量访问静态属性和方法以提高性能。相当于在CS中运行前先把lua的tab,fun先映射出来。

local camera=gameObject.Find("Main Camera");
camera.name="Kcam";
												--访问成员方法,通过对象来调用
local test=gameObject.Find("test");
local sound=test:GetComponent("Audio Source")	--使用冒号将当前对象作为第一个参数传递过去,lua没有this;

gameObject.Destroy(sound);
5关于输入输出
--[[

lua

	xxx(t1,t2,t3)						输入属性 普通算,ref算,out不算

		return re1,t3,t4,				输出属性  普通算,ref算,out算
	end


c#

	xxx(type t1,type t2,ref t3,out t4){

	return re1;
	}

--]]


























Qt上位机实战:5步搞定STM32 IAP固件升级(附拖拽文件处理技巧) 本文详细介绍了如何使用Qt开发STM32 IAP固件升级上位机。通过五个核心步骤,包括理解IAP机制、搭建Qt环境、实现拖拽文件加载、封装串口通信以及设计可靠通信协议,帮助开发者快速构建一个稳定、易用且支持图形化操作的固件升级工具,显著提升嵌入式产品开发与维护效率。 阅读详情

相关推荐

金蝶云ERP远程办公指南:零公网IP实现安全内网穿透访问

本文详细介绍了如何利用内网穿透技术,在无需公网IP和复杂路由器设置的情况下,安全远程访问内网部署的金蝶云ERP系统。通过使用cpolar工具,逐步指导用户创建加密隧道、配置固定域名,并实现管理中心与数据中心的远程登录,有效解决了企业员工在外出或居家办公时的核心业务系统访问难题。

weixin_29229261的博客 269

XLua C#调用Lua的全局变量、table、函数

//C# 调用Lua using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; //自定义委托(多个返回数值的函数) //自定义委托(使用out关键字) [CSharpCallLua] public delegate void delAddin...

m0_37981386的博客 1253

循环神经网络(RNN)

在之前学习了全连接神经网络(DNN)模型,网络结构都是从输入层到隐含层再到输出层,层与层之间是全连接或部分连接的,但每层之间的节点是无连接的。 一、神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到希望的y,结构图如下: 将神经网络模型训练好之后,在输入层给定一个x,通过网络之后就能够在输出层得到特定的y,那么既然有了这么强大的模型,为什么还需要RNN(循环神经网络)呢? 二、为什么需要RNN(循环神经网络) 考虑这样一个问题,如果要预测句子的下一个单词是什么

小朱小朱绝不认输的博客 2万+

腾讯开源手游热更新方案Xlua尝鲜(二)——执行Lua字符串和Lua文件加载

Lua文件加载 一、执行字符串 最基本是直接用LuaEnv.DoString执行一个字符串,当然,字符串得符合Lua语法 比如: using UnityEngine; using XLua; public class Helloworld : MonoBehaviour { void Start () { LuaEnv luaenv = new LuaEnv();

尹华南的博客 5769

【量化交易】迅投QMT——基础操作新建策略导入策略!

策略指标 #基础操作 #新建策略 在【我的】主页,点击新建策略按钮 点击【pyhton策略】模型 会弹出一个策略编辑器框 【新建策略文件】 编辑完点击【编译】按钮 关闭策略编辑器 导入策略 券商 QMT:1. 点击进入【模型研究】界面2. 右键 -> 选择本地. rzrk导入 投研端:1. 点击【行情】界面,选择模型2. 右键 -> 选择本地. rzrk导入 #策略在副图作为指标运行 在主图上双击策略 VBA策略可以直接输出图像

weixin_eng02048的博客 4108

【Unity】NGUI下载与导入

Unity3D插件NGUI的下载和导入。

Get your hands dirty 3万+

【Lua语言学习04】Lua变量,访问局部变量比全局变量更快

Lua变量有三种类型:全局,局部,表中的域 Lua变量不加local 都是全局变量 例如: --test.lua文件脚本 a = 5 --全局变量 local b = 5 --局部变量 function joke() c = 5 --全局变量 local d = 6 --局部变量 end joke() print(c,d) --5 nil do...

文武先生的专栏 950

Camera HAL 多线程管理详解

本文摘要:Camera HAL 采用双线程管理体系(CAMX与CHI-CDK)实现高效并发处理。CAMX ThreadManager负责HAL内部及框架交互,采用线程池+任务调度机制,将节点处理、回调等封装为Job异步执行;CHI ThreadManager专注于OEM定制逻辑,支持异步/同步两种作业模式。两套系统通过函数指针解耦但共享地址空间,共同实现硬件流水线的强实时性。文章详细解析了两者的类层次架构、核心数据结构及典型应用场景,并提供了问题排查的代码切入点,为Camera HAL开发与性能优化提供指导

DU_YULIN的博客 56

XLua系列讲解_C#访问Lua的boolean、number、string 类型全局变量

一、访问boolean、number、string 类型的全局变量 1.在“Resources”目录下,新建一个名字为 “CSharpCallLua.lua.txt” 的lua脚本 2.在 “CSharpCallLua.lua.txt” 脚本中定义我们需要访问的数据类型(代码如下) --测试C#访问lua脚本中的 boolean、number、string 类型的全局变量 isFistrTime=true --测试访问 boolean 类型的全局变量 number1=10 --测

a451319296的博客 936

跨越边界:用MessagePipe实现无缝的进程间通信

MessagePipe是一个用于.NET平台的消息传递库,它专注于简化异步消息处理和进程间通信。通过提供一系列易于使用的API,开发者可以快速搭建起稳定可靠的通信管道,支持多种传输协议(如TCP、Unix域套接字等),并内置了序列化/反序列化功能,使得跨语言和跨平台的数据交换变得轻而易举。为了方便序列化和反序列化操作,我们需要为每种消息定义对应的类或结构体,并标记属性。这样可以确保消息在发送方和接收方之间正确无误地传递。[Key0set;[Key1set;

墨夶的博客 816

NR PUCCH(二)PUCCH format 2/3/4

继续看PUCCH2/3/4:PUCCH format 0和1所携带的信息bits少,UCI bits2bits,信息bit需要经过编码等过程下面分别来看。

ModemProtocol的博客 538

初识xLua(二)

标签 [Hotfix] 给要修改的类,所打上的标签 [LuaCallCSharp] 给要修改的 C# 方法,所打上的标签 [CSharpCallLua] 给要调用到 lua 方法的,或者是要从 lua 映射过来的方法,所打上的标签 修改一个方法 例如,要修改下面的这个方法,这个方法在 Treasour 这个类中 [LuaCallCSharp] private void Cre...

好的都要记下来 696

从零学懂车载 TSN(二):802.1AS、Qbv、Qbu 是如何让 Ethernet “按时发送”的?

假设有两台设备: ECU A 认为: 但 Switch B 认为: 如果我们规定: 问题就来了。ECU:Switch:整个调度立即失效。因此 TSN 要做时间调度,第一件事就是:这就是:IEEE 802.1AS 定义时间敏感网络里的:工程中通常会看到:gPTP也就是:generalized Precision Time Protocol可以先简单理解成: 核心表达:所有 TSN 节点使用共同时间。后面抓包时你会经常遇到: 刚入门时不用急着研究每个 bit。先搞清楚它们解决什么问题。两个设备连接: A 需要知

struggle_22_58的博客 50

Unity中使用xLua基础

xLua基础篇 前置工作:创建好空的Unity工程并导入xLua中的Asset文件夹 (xLua下载地址) 加载运行Lua代码 在C#中使用xLua主要是通过XLua命名空间中的LuaEnv中的DoString去运行Lua代码,如下图所示: 再进一步,就是我们创建一个Resources文件夹,并在里面创建一个HelloWorld.lua.txt文件(这里后缀必须加上.txt才能让Unity和xL...

Kayn_Liu的博客 4200

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

XLua_01_基础使用

    以下使用Unity2017.4.10 + VS2017 + 最新版XLua     XLua下载地址:https://github.com/Tencent/xLua ================================================================================================ Lua里面的Self ...

MikuLingSSS的博客 1507

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Unity xLua开发环境搭建与基础进阶

Unity是一款非常流行的游戏开发引擎,而xLua是一个为Unity开发者提供的Lua框架,可以让开发者使用Lua语言来进行游戏开发。通过学习xLua框架,我们可以更加灵活地进行游戏开发,并且可以轻松地调用Unity的API和定义C#类。在Unity Asset Store中搜索Lua,可以找到很多Lua相关的插件,选择一个适合自己的插件下载安装即可。除了调用Unity的API,我们还可以在Lua脚本中定义并使用C#的类。例如,我们可以在Lua脚本中定义一个简单的类,并在其他Lua脚本中进行实例化和调用。

voidinit的专栏 971

xlua基础知识

1.1 xLua简介 xLua是由腾讯维护的一个开源项目,xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能、易用性、扩展性而广受好评。现在,腾讯已经将xLua开源到GitHub。其git地址是:https://github.com/Tencent/xLua。 xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是: 可以运行时把C#实现(

UNITY3D游戏引擎技术专家 4187

xLua基础

1.什么是热更新热:就是刚出炉简单来说就是当游戏某个功能出现bug,或者修改了某个功能,或者增加了某个功能的时候,我们不需要重新下载安装安装包,就可以更新游戏内容。热更新的好处:不用浪费流量重新下载,不用通过商店审核更加快速,不用重新安装玩家可以更快体验到更新的内容目前比较受欢迎的热更新方案:uLua tolua xLua2.主菜:“xLua”xLua为Unity、 .Net、 Mono等C#环境...

qq_39038038的博客 428

零基础掌握xLua:Unity渲染顺序的Lua控制实战指南

xLua是针对C#(Unity、.Net、Mono)的Lua编程解决方案,支持Android、iOS、Windows、Linux、OSX等多平台。本文将为零基础开发者提供使用xLua控制Unity渲染顺序的实战教程,帮助你快速掌握这一核心功能。 ## 为什么选择xLua控制Unity渲染顺序? 在Unity开发中,渲染顺序决定了游戏对象的显示层级。通过xLua,开发者可以使用Lua脚本灵活控制

gitblog_01149的博客 1089

lua(xlua)基础知识点记录一

本文摘要总结了Lua编程中的几个关键知识点:1)字符串拼接操作符(..)的编译优化与运行时机制;2)table.concat对元素类型的限制;3)xLua调用C#重载方法时的类型匹配规则,包括数字类型转换、nil处理和参数个数验证;4)table的rehash时机和扩容机制;5)Lua面向对象实现中类实例共享静态属性和方法的特点。这些内容涵盖了从基础语法到跨语言交互的重要技术细节,为Lua开发者提供了实用的编程指导。

qq_30058057的博客 629

xlua学习之路(二)xlua基础

lua文件加载 1.执行字符串 XLua.LuaEnv luaenv = new XLua.LuaEnv(); luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')"); luaenv.Dispose(); 1、DoString参数为string,可输入任意合法的Lua代码,本示例在lua里调用C#的UnityEngine....

路漫漫其修远兮,吾将上下而求索 1231

XLua基础

XLua简介 Xlua是腾vb.net教程讯研发c#教程的一款Lua开源插python基础教程件,为Unity、 .Net、 Mono等C#环境java基础教程增加Lua脚本编程的能力,借助xLua,这些Lua代码可sql教程以方便的和C#相互调用,在游戏中,该技术多用于热更新。可以在GitHub上搜索XLua进行下载,如果网速太慢,也可以在gitee上下载 [gitee链接]https://gitee.com/mirrors/xlua?utm_source=alading&amp;utm_..

chinaherolts2008的博客 446

xLua笔记(热更新框架设计之Xlua基础)

热 更新的 基本原理  C#脚本不能直接热更新的原因: 下载的图片与模型都没有问题,如果是Unity逻辑代码,无论是以前的 Mono AOT 还是后面的il2cpp , 都是编译成native code, IOS下是运行不起 来的。  解决方法 就是不用native code ,改为解释执行。包括Xlua在内所有热更新就是这 个思路来实现。   Xlua插件的GitHub 下...

lizhenxiqnmlgb的博客 4169

lua(xlua)基础知识点记录二

本文分析了Lua函数传参机制和xLua框架中C#与Lua的交互原理。Lua函数传参分为值传递(基本类型)和引用传递(表、函数),后者传递的是指向变量的指针副本。在xLua中,C#对象通过userdata与Lua交互,使用objId标识符关联实际对象,通过ObjectTranslator管理引用计数。Lua对象在C#中通过LuaBase类管理,使用luaL_ref创建引用。文章通过示例代码展示了双方GC机制如何协同工作回收对象:只有当Lua和C#两端都没有引用时,对象才会被完全回收。理解这些机制有助于避免内存

qq_30058057的博客 1141

热更新简介+xLua基础调用

开发者将测试好的代码,发布到应用商店的审核平台,平台方会进行稳定性及性能测试。测试成功后,用户即可在AppStore看到应用的更新信息,用户点击应用更新后,需要先关闭应用,再进行更新。什么是热更新广义:无需关闭应用,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码。狭义定义(iOS热更新):无须将代码重新打包提交至AppStore,即可更新客户端的执行代码,即不用下载app而自动更新程序。

m0_74236534的博客 1457

Xlua的基础案例学习

xlua的官网:https://github.com/Tencent/xLua. xlua的说明:http://gad.qq.com/article/detail/42303. 自定义加载Lua文件: public byte[] Loader(ref string filePath) { string path = Application.streamingAssetsPa...

qq_38139885的博客 425
上一篇: lua笔记二
下一篇: RPG小端游
RootTimeYu
博客等级 码龄9年 4粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值