Unity实验室之C#调用Lua脚本

C#中调用lua 首先引入LuaInterface.dll库文件  //创建Lua的解释器             Lua lua = new Lua();             //定义一个num             lua["num"] = 34;             Console.WriteLine(lua["num"]);             //定义一个字符串 阅读详情

介绍

xLua是腾讯在github上的一个开源项目(下载链接),主要解决热更的问题,是和C#(Unity,.Net,Mono)结合的解决方案。支持android,ios,windows,linux,osx等平台。目前已经有许多成熟产品应用案例使用了xLua.本文主要介绍C#如何调用xLua脚本。

变量

-- example.lua.txt
id=25
name='hello'
isMale = true
//Example.cs
var id = luaenv.Global.Get<int>("id");
var name = luaenv.Global.Get<string>("name");
var isMale = luaenv.Global.Get<bool>("isMale");
Debug.Log(id);
Debug.Log(name);
Debug.Log(isMale);

调用类的实例

--example.lua.txt
character={
    m_id=25,
    m_name='hello'
}
//Example.cs
public class Character{
    public int m_id;
    public string m_name;
}
var character = luaenv.Global.Get<Character>("character");
Debug.Log(character.m_id);
Debug.Log(character.m_name);

调用列表

-- example.lua.txt
character={
    5,10,15
}
//Example.cs
var character = luaenv.Global.Get<List<int>>("character");
Debug.Log(character[0]);
Debug.Log(character[1]);
Debug.Log(character[2]);
Debug.Log(character.Count);

调用接口

--example.lua.txt
character = {
    Id = 25,
    Name='hello',
    Add = function(self,a,b)
        print('Character.Add')
        return a+b
        end
}
//Example.cs
using XLua;
[CSharpCallLua]
public interface ICharacter{
    int Id{get;set;}
    string Name{get;set;}
    int Add(int a,int b);
}
var character = luaenv.Global.Get<ICharacter>("character");
Debug.Log(character.Id);
Debug.Log(character.Name);
Debug.Log(character.Add(5,10));

LuaTable

--example.lua.txt
character={
    m_id=25,
    m_name='hello'
}
//Example.cs
var character = luaenv.Global.Get<LuaTable>("character")
Debug.Log(character.Get<int>("m_id"));
Debug.Log(character.Get<string>("m_name"));

函数调用

--example.lua.txt
function Log()
    print('hello')
end
//Example.cs
using System;
var log = luaenv.Global.Get<Action>("Log");
log();
log = null;

复杂函数

--example.lua.txt
function Battle(id,name)
    print(id,name)
    return "success",{m_coin=512,m_exp=1024}
end
//Example.cs
using XLua;
public class Result{
    public int m_coin;
    public int m_exp;
}
[CSharpCallLua]
public delegate string Battle(int id,string name,out Result c);
var func = luaenv.Global.Get<Battle>("Battle");
Result result;
var message = func(25,'hello',out result);
func = null;
Debug.Log(message);
Debug.Log(result.m_coin);
Debug.Log(result.m_exp);

代理

--example.lua.txt
function ShowMessage()
    print('5 hello!')
end
function Attack()
    print('attack')
    return ShowMessage
end
//Example.cs
using XLua;
[CSharpCallLua]
public delegate Action Attack();
var attack = luaenv.Global.Get<Attack>("Attack");
var showMessage = attack();
showMessage();
attack = null;
showMessage = null;

LuaFunction

--example.lua.txt
function ShowMessage()
    print('hello')
end
//Example.cs
using XLua;
var showMessage = luaenv.Global.Get<LuaFunction>("ShowMessage");
showMessage.Call();
Unity C#与Xlua的交互 Lua调用C# LuaCallCSharp 继上篇的C#调用Lua之后,这篇主要记录Unity中使用XLua是如何在Lua代码中调用C#代码的。相关的文档资料与上篇相同,这里就不赘述了。除了官方的Demo,自己也加了个小demo,对应文章的内容,在MyExamples目录下的LuaCallCSharp。LuaCallCSharp备注:Lua Call C#代码的时候,C#处生成的代码基本都需要打标签[LuaCallCSharp]。关于标签的... 阅读详情

相关推荐

Unity3D 基于XLua框架实现Lua组件化开发方式(一)----基于C#调用Lua

众所周知Unity的开发语言是C#,并不支持Lua语言,为了解决这一问题出现了诸如Xlua、ULua、ToLua等框架来让unity支持lua,由于为了应对众多游戏经常需要解决的热更新问题,出了两种主流开发模式: 开发语言仍然用C#,用lua做热更新。 开发语言和热更新完全采用lua语言。 其中XLua是腾讯开发的目前行业做游戏热更新最常用的框架,本篇文章就是为了简单介绍两种如何在unity中使用lua语言做到像c#一样的组件化开发模式。 一、git下载xlua框架: 前往github下载xl.

qq_37872192的博客 6721

Unity3D热更新基础:C#与Lua相互调用

在使用Unity开发游戏以支持热更新的方案中,使用ULua是比较成熟的一种方案。那么,在使用ULua之前,我们必须先搞清楚,C#与Lua是怎样交互的了?

zhuweisky 5204

lua中调用C#

1.将luanet.dll文件拷贝进工程目录下bin/Debug文件夹下 2.编写lua文件(编码格式应为ANSI) require "luanet" --加载C#命名空间 luanet.load_assembly("System") --导入C#命名空间中的类 Int32=luanet.import_type("System.Int32") 在Lua中使用C#中的类创建对象的时候,

无道的博客 6001

C#调用Lua

require函数会在自定义函数(如果是多个就依次找)中找文件,如果都找不到再去默认路径(Resources)查找。CSharpCallLua特性要在自定义委托和接口前加上。

qq_62622514的博客 1024

Unity C#与Xlua的交互 C#调用Lua CSharpCallLua

最近学习XLua,看了下官方的文档。对于我这样的小菜鸡而言需要知道的知识点还是蛮多的,就做个笔记,其实差不多等于把文档里面的知识ctrl C ctrl V一遍。正在准备学习这块的小伙伴们可以多看看官方给的文档。下面是自己的一个GitHub XLua Demo 地址。里面也存放了文档(XLuaDocs文件夹中)这篇主要记录记录C#与XLua的相互交互,即C#如何访问调用Lua的属性方法和Lua如何调...

王王王渣渣的博客 1万+

xLua笔记(2)—Unity对象的MonoBehaviour Lua脚本

我们通常用继承了monobehaivor的C#脚本来开发游戏,本节我尝试用lua脚本来制作这样这个脚本,在lua侧来开发实现业务逻辑。 1、根据unity对象的生命周期,我们定义常见的几个MonoBehaivor的函数,我们先创建一个lua脚本,包含了这里面的几个通用函数。 LuaMonoBehaviour.lua文件,目录在Assets\LuaScripts\Common下 function A...

JoeyHuangzx的专栏 2303

Lua与C#的相互调用(xLua)

xLua是由腾讯维护的一个开源项目,xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。

qq_54476817的博客 8432

Unity 热更新技术 |(五)Lua与Unity_C# 交互总结

开始学习热更新方面系列知识,就从这一篇开始吧! 本系列教程 会从热更新基本概念出发,详细介绍热更新相关的全套知识点。 如热更新技术基本原理、热更新主流方案、AssetBundle系列教程、Lua语言编程、Lua与Unity交互教程、Xlua框架使用、热更新实战教程等方面。 热更新作为一个开发者必备技能,如果想学习的话,可以从现在开始了哦~ 接下来先从Lua与Unity交互总结 开始学习吧!

努力前行,总会成为自己心中的那道光 1万+

C#调用Lua 3-Lua解析器管理器

using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using XLua; /// <summary> /// Lua管理器 /// 提供 lua解析器 /// 保证解析器的唯一性 /// </summary> public class LuaMgr : BaseManager<LuaMgr> { //执行Lua语言的函数.

qq_36382679的博客 568

c#调用脚本语言Lua——简单Demo

c#调用脚本语言Lua——简单Demo 配置: 1. 下载c#下的Lua支持类库。下载地址:http://files.luaforge.net/releases/luainterface/luainterface/2.0.3 将(lua51.dll\LuaInterface.dll)引用自己的项目中。 2. 修改App.config添加以下内容: [html] view plaincopyprint?在CODE上查看代码片派生到我的代码片

Pinocchio 安装教程|机器人学的必备库

安装pinocchio,不要安装pip3 install pinocchio!

darcsdn 1660

Unity C#调用Lua

在现代游戏开发中,游戏逻辑的灵活性和可扩展性变得越来越重要。Unity作为一款强大的游戏引擎,支持多种编程语言,其中C#是其主要脚本语言。然而,有时候我们需要在游戏中实现一些动态的行为或者逻辑,这时候Lua脚本语言就显得尤为重要。Lua是一种轻量级、嵌入式脚本语言,它设计简洁、易于学习,并且执行效率高。Lua的灵活性和动态特性使其成为游戏开发中处理游戏逻辑、配置和数据驱动行为的首选脚本语言。动态逻辑:在游戏运行时动态加载和执行脚本逻辑。热更新:无需重新发布游戏即可更新游戏内容或修复bug。扩展功能。

weixin_67674686的博客 1362

电力电子技术进阶:从基础到实战的完整学习路径

本文系统阐述了电力电子技术从基础到实战的完整学习路径。首先解析了电力电子作为“电能魔术师”的核心作用,随后深入剖析了数学工具、电路电磁场与半导体器件三大基础支柱。文章重点讲解了DC-DC、DC-AC、AC-DC等核心变换拓扑,并探讨了从经典PID到现代模型预测控制(MPC)的控制策略。最后,分享了硬件设计、软件调试、电磁兼容(EMC)等实战经验与前沿趋势,为学习者提供了清晰的进阶指南。

weixin_29204205的博客 445

Unity--C# 调用LUA文件

Unity--C# 调用LUA

qq_40669895的博客 1875

具身智能ACT模型在lerobot机械臂上的实践与优化

本文详细介绍了如何在低成本lerobot机械臂上实践与优化具身智能ACT模型。从环境搭建、数据采集到模型原理与代码实战,提供了完整的入门指南。重点分享了通过数据增强、混合开源数据集及模型微调等策略,有效提升模型在抓取放置任务中的泛化能力与鲁棒性,为机器人学习爱好者提供了宝贵的实战经验。

weixin_29081703的博客 167

英飞凌TC3xx之一起认识GTM系列(六)如何实现GTM与VADC关联的配置

本文给出了GTM与EVADC之间关联的细节,并通过两个实例分别说明了如何对寄存器进行配置。

无所适从的我的博客 2931

Unity Lua调用C#

在Unity项目中,通过Lua调用C#代码,我们可以充分利用C#在性能优化、系统级操作和Unity API访问方面的优势,同时借助Lua的灵活性和动态性,实现更加丰富的游戏逻辑。这种结合不仅提高了开发效率,还增强了游戏的可扩展性和可维护性。

weixin_67674686的博客 1301

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

【YOLO11改进 - 特征融合】利用Hyper-YOLO 的混合聚合网络(MANet)改进yolo11,提升基础网络的特征提取能力

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 903

Unity XLua学习笔记(三):Lua调用C#

上一篇文章 Unity XLua学习笔记(三):C#调用Lua 创建一个Lua脚本 Lua脚本 LuaCallCSharp.lua脚本内容: local obj1=CS.UnityEngine.GameObject() local obj2=CS.UnityEngine.GameObject("测试游戏对象") Main.lua脚本内容: require("LuaCallCSharp") 在Unity中用C#脚本调用(执行Main.lua脚本) XLuaMgr.GetInstance().Init()

qq_42393139的博客 4745

C 语言多文件编程 : 大型程序的组织与管理

本文介绍了C语言多文件编程的核心概念与实践方法。主要内容包括:1. 多文件编程的必要性:解决单文件编程在大型项目中的维护和协作问题;2. 文件组织方式:头文件(.h)负责声明接口,源文件(.c)实现具体功能;3. 编译链接过程:分阶段编译和链接多个源文件;4. 头文件设计原则:包含接口声明、使用保护机制、保持自包含性;5. 模块化实践:通过示例展示学生信息管理系统的模块划分;6. 构建工具:介绍Makefile的编写和使用方法。文章还提供了创建静态库和动态库的指导,并强调了模块化设计、信息隐藏等软件工程原则

2503_91057718的博客 1945

Linux ARM平台开发系列讲解(LED) 2.1.1 如何点亮一个LED之添加设备树信息

1. 设备树添加设备信息 我拿到的开发板上有两颗LED供用户编程使用,分别是GPIO5_IO8和GPIO5_IO9,设备信息如下,不同板子的设备定义不同,根据自己的实际情况进行添加。 2. 编译设备树 根据自己拿到的SDK,执行编译命令,我这里拿到的SDK编译脚本为: ./build.sh kernel 3. 使用uuu工具烧录新编译好的内核 因为imx8 SDK设备树和内核是统一编译成一个镜像,所以只需要烧录内核,设备树文件也会烧录。 sudo uuu -b emmc imx-kernel.bin

DSMGUOGUO的博客 917

xlua用法 c#调用lua脚本

C# 调用 lua c# 调用lua脚本的三种方法 【直接运行代码】 luaEnv.DoString("print(888)"); 【运行Resources目录下的lua脚本】 // 直读 Assets/Resources下的lua脚本。比如脚本是test.lua.txt,输入脚本名忽略扩展名txt,即test.lua。 TextAsset luaScript = Resources.Load...

失业求捞! 2584

IoT安全软件:Forescout二次开发_Forescout基础架构与原理

Forescout平台是一个集成了多种安全功能的综合解决方案,旨在帮助组织管理和保护其网络中的IoT设备。该平台通过自动发现、分类和监控网络中的设备,提供实时的安全可见性和控制。Forescout的核心优势在于其能够处理混合环境中的各种设备,包括传统IT设备、IoT设备和OT设备。Forescout平台由多个核心组件组成,每个组件负责特定的功能。了解这些组件的运作机制是进行二次开发的基础。假设我们需要定义一个策略,禁止所有厂商为XYZ的设备访问互联网。选择策略类型。

chenlz2007的博客 1965

Xlua分析:Lua调用C#

在之前的博客中讲了有关lua和c#交互的比较浅层的概念,即C#侧注册[LuaCallCSharp]和[CSharpCallLua]的标签后,即可实现双侧沟通。但是还是没有讲明白里面的一些具体内容包括参数传递、xlua栈调用,甚至是C#如何调用lua都没研究。本篇主题是lua如何调用C#的补充。

weixin_45218342的博客 3230

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

xlua用法,lua脚本调用c#

lua调用c# lua调用c#的对象 所有c#对象都放在CS中 CS.System;CS.System.IO;CS.UnityEngine.GameObject(); lua调用c#静态变量 基本脚本结构 【luai脚本】 -- 全局变量 s1 = "this is lua" --引用unity方法 local GameObject = CS.UnityEngine.GameObject loc...

失业求捞! 2764

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Lua in Unity】详解与和C#互相调用示例

游戏逻辑编写:Lua可以作为一种脚本语言,用于游戏中的逻辑编写,例如定义游戏角色的行为、AI逻辑,处理游戏的战斗逻辑和流程控制,等等。可以将Lua代码通过Unity的API来实现与引擎的交互。这样做的好处是,可以将游戏逻辑与引擎代码分离,加快开发速度,同时更容易修改和调试。配置数据管理:Lua也可以作为一种配置语言,用于管理游戏数据,例如定义游戏中的各种参数、表格、配置表等等。

Null 2912

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: Unity实验室之XLua调用C#程序
下一篇: Lua实验室之Lua语法
小城码仔
博客等级 码龄18年 99粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值