XLua与C#的简单交互

XLua性能优化——transform、Vector3 阅读详情

 由于本人也是刚刚接触XLUA,所以,  今天的这篇文章就简单的讲述一下XLUA调C# ,C#调XLUA 的基本运用。

开始是C#调用LUA:

首先先下载Xlua文件  解压 把需要的文件导入到unity中

链接:https://pan.baidu.com/s/1OPivTn54SQjNl3H3IBHMrQ 
提取码:twgf 

导入完成以后新建一个CS脚本 ,在CS脚本中引用XLUA的命名空间。

 public GameObject cube;

    LuaEnv luaEnv = null;
    // Use this for initialization
    void Start()
    {
        //初始化lua环境  
        luaEnv = new LuaEnv();

        #region   C#调用lua

        luaEnv.DoString("print'hello word'");

        //第一种加载Lua文件 用 Resources.Load  需要把lua文件放在Resources文件夹下
        TextAsset textAsset = Resources.Load<TextAsset>("testLua07.lua");
        luaEnv.DoString(textAsset.text);

        //第二种加载Lua文件  用 require
        luaEnv.DoString("require'testLua07'");

        //获取定义变量   可以通过luaEnv.Global.Get<>()  就可以在C#中访问XLUA里面的声明的变量
        int a = luaEnv.Global.Get<int>("a");
        int b = luaEnv.Global.Get<int>("b");
        bool c = luaEnv.Global.Get<bool>("c");
        string d = luaEnv.Global.Get<string>("d");
        Debug.Log("C# 调用lua里面定义的变量" + (a + b) + c + d);

        //获取lua 无参方法
        LuaFunction funLua1 = luaEnv.Global.Get<LuaFunction>("funLua1");
        //调用方法
        funLua1.Call();

        //调用lua  有参方法
        LuaFunction funLua2 = luaEnv.Global.Get<LuaFunction>("funLua2");
        funLua2.Call(1, 2);

        #endregion

        luaEnv.DoString("CS.UnityEngine.Debug.Log('C#  hello word hello word')");

    }

Lua文件如下:

print("hello i am lua ")
 --int
a=1   
b=2

 --bool
c=true 

--string 
d="Wahaha"   

print("变量a+b"..a+b)

--lua方法1  无参方法
function funLua1()
print("LuaFun1 a+b"..a+b)
end

--lua方法2 有参方法
function funLua2(e,f)
    print("调用有参方法 e+f"..e+f)
end
 

Lua调用C#:

C#脚本如下:

#region lua 调用C#

    //静态属性 和方法
    public static int index = 1;
    public static int Add(int a, int b)
    {
        return a + b;
    }

    //非静态方法 和属性
    public int id = 1;
    public void Log(int id = 1, string name = "hello")
    {
        Debug.Log("id加姓名:" + id + name);
    }
    
    #endregion
    
    // Update is called once per frame
    void Update()
    {
        if (luaEnv != null)
        {
            //清除Lua未手动释放的Luabase对象
            luaEnv.Tick();
        }
    }
    void OnDestroy()
    {
        //释放
        luaEnv.Dispose();
    }

 

 

lua脚本:


--[[
lua 调用C#

]]
--lua 调用C#   静态方法和属性
--通过CS点类名
local add=CS.Test
--获取到类名 再通过点定义的变量   可访问到属性
add.index=5;
--获取到类名 通过点方法   可访问到方法
add.Add(2,3)
print("lua"..add.index.."a+b"..add.Add(2,3))


--lua调用非静态方法和属性 
--通过点类名 获取到对象
local Logstr=CS.Test
local logstr=Logstr()
--通过点变量  来访问变量
logstr.id=55
print("lua no static fun"..logstr.id)
--通过冒号方法    来访问方法  
logstr:Log()
logstr:Log(1231212)
logstr:Log(12,"wahaha ")
 

--通过Lua获取到unity里面的对象  Lua中通过 CS.UnityEngine.GameObject 获取unity组件


print("访问静态属性 time "..CS.UnityEngine.Time.deltaTime)


--构造游戏物体 New一个名为“”GameObject“”对象  
local go= CS.UnityEngine.GameObject("GameObject")


把“”GameObject“”名字改为“”go“”
go.name="go"


--获取到 组件
local Light=CS.UnityEngine.GameObject.Find("Directional Light"):GetComponent("Light");


--销毁组件  销毁物体使用 CS.UnityEngine.GameObject.Destroy()
CS.UnityEngine.GameObject.Destroy(Light)


--获取组件  并重新赋值位置   lua中可以使用Find来查找物体 
local cube =CS.UnityEngine.GameObject.Find("Cube");


--设置物体位置
cube.transform.position=CS.UnityEngine.Vector3.one
cube.transform.position=CS.UnityEngine.Vector3(0,3,0)
--设置大小
cube.transform.localScale=CS.UnityEngine.Vector3(3,3,3)
--设置位置
cube.transform.localPosition=CS.UnityEngine.Vector3(5,5,5)
--设置父物体
cube.transform:SetParent(CS.UnityEngine.GameObject.Find("go").transform);
--改变颜色
cube:GetComponent("Image").color=CS.UnityEngine.Color(111/255,89/255,1)


--获取类型 可以用typeof() 如:go:AddComponent(typeof(CS.UnityEngine.ParticleSystem));

--[[--添加刚体
rig=nil
rig=cube:AddComponent(typeof(CS.UnityEngine.Rigidbody))
   rig.useGravity=false
--]]

 

今天文章只讲述了C#与XLua之间属性和方法的简单调用(因为刚开始只研究到这里0.0)

等后面研究之后在奉上文章。。。 

Xlua 踩坑笔记(一 ) Xlua的创建和读取 本人原来是做VR的,发现时间长了是真的坑人,VR太简单了,离职后找工作太难了,好多都不会,离职后才有时间研究这个,抽时间把坑位介绍给初学lua的朋友 具体的Xlua下载大家可以去Git开源上面下载,相信有编程基础的同学,这点事还不大 具体只讲究Xlua的使用 大家下载Xlua包导入工程后可以在XLua --Examples文件夹下面看到演示案例,还可以在XLua--Doc文件夹... 阅读详情

相关推荐

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

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

王王王渣渣的博客 1万+

Xlua原理详解(C#与Lua交互,Unity热更新)

Xlua原理详解(C#与Lua交互,Unity热更新)1.代码分析C#,Lua通信原理(1)Lua调C#,适配模式和反射模式(2)C#调Lua2.代码分析Wrap文件生成过程3.代码分析Hotfix原理熟悉Xlua会让你对游戏热更新框架更得心应手~

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

继上篇的C#调用Lua之后,这篇主要记录Unity中使用XLua是如何在Lua代码中调用C#代码的。相关的文档资料与上篇相同,这里就不赘述了。除了官方的Demo,自己也加了个小demo,对应文章的内容,在MyExamples目录下的LuaCallCSharp。LuaCallCSharp备注:Lua Call C#代码的时候,C#处生成的代码基本都需要打标签[LuaCallCSharp]。关于标签的...

王王王渣渣的博客 1万+

Unity Xlua 之 Lua调用C#(一)

Unity Xlua 之 Lua调用C#(一) 一.Lua使用C#类 public class MyClass1 { public void Test(string str) { Debug.Log("MyClass1:"+str); } } namespace Zzs { public class MyClass2 { public void Test(string str) { Debug.

zzzsss123333的博客 1136

xLua热更新(一)xLua基本使用

xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。xLua是用来实现Lua代码与C#代码相互调用的插件。们可以借助这个插件来实现热更新方案。那么为什么要选择Lua实现热更新呢? 这是因为Lua具有轻量、灵活的特点,可以在几乎任何平台上编译、运行。Unity一般使用C#代码编写游戏逻辑。在打包时,C#会先编译成IL(中间语言),存储到dll(动态链接库)中。在游戏运行时,需要通过JIT(即时编译)将IL解释为机器码

夜槿笙歌的博客 7948

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

qq_43244501的博客 656

利用XLua写前端逻辑

思路:新建一个通用的LuaCustomCommon类挂在需要用lua实现逻辑的prefab上。通过这个组件关联名为Panel的lua脚本,生成对应的LuaTable,通过这个组件为lua赋值对应prefab的属性,并在Start(),Update()等生命周期方法中通过LuaTable.Get(“MethodName”);调用lua中对应的方法。在lua中使用transform:Find(“name”)来关联prefab中的组件,通过这个LuaCustomCommon类就可以把前端的逻辑放在Lua脚本中。

qq_38139885的博客 708

xlua源码分析(六) C#与lua的交互总结

我们分析了xlua对struct类型所做的优化,本节我们系统性地梳理一下xlua中C#与lua的交互。所谓C#与lua的交互,其实主要就分为两部分,第一是往lua层中传数据,第二则是从lua层中取数据。

异次元的归来 1759

[游戏开发][Unity] Xlua与C#互相调用规则

Xlua调用C#方法。

liuyongjie1992的博客 1914

Unity2020 几种常用热更新方案的优劣及XLua实战

了解热更新之前,首先得知道为啥要用热更新? 为了省去用户自行更新客户端的步骤,从而改善用户体验。 Unity热更新方案一、几种常用热更新方案的区别1、uLua2、xLua3、toLua4、ILRuntime5、uLua二、下载地址及教程 一、几种常用热更新方案的区别 热更新 1、uLua 2、xLua 3、toLua 4、ILRuntime 5、uLua 二、下载地址及教程 ...

小程小程,永不消沉 1万+

欧姆龙 CJ1W-SCU模块使用通配符+结束码实现非固定长度数据的接收

实验设备:CJ2M-CPU33、CJ1W-SCU21、XW2Z-200T 实验目的:了解 CJ1W-SCU 通配符使用 1.硬件接线: CJ1W-SCU21单元号拨码置于8,使用串口1(232口)。 2.软件设置: ① 新建工程,选择PLC型号CJ2M-CPU33,切换到编程模式,如下图: 、 ② 创建I/O并进行相关配置,如下图: ③ 设置为用户设置,协议宏模式,8位数据位,2位停止位,偶校验9600波特率,如下图: 、 ④ 打开CX-Protocal软件,新建工程: .

weixin_42118352的博客 1984

XLua实现简单3D的打地鼠

GameObject=CS.UnityEngine.GameObject Resources=CS.UnityEngine.Resources Vector3=CS.UnityEngine.Vector3 Physics=CS.UnityEngine.Physics Camera=CS.UnityEngine.Camera Input=CS.UnityEngine.Input function ...

qq_43427963的博客 574

香橙派5玩转SATA SSD:一个被忽略的overlays配置项,让你的Ubuntu系统飞起来

本文详细介绍了如何在香橙派5上通过配置`overlays=ssd-sata`启用SATA SSD作为系统启动盘,大幅提升Ubuntu系统的性能。文章深入解析了设备树覆盖的工作原理,提供了完整的配置流程和性能优化建议,帮助开发者充分发挥香橙派5的硬件潜力。

weixin_30787531的博客 220

【Lua与C#交互①】Lua中的栈

之所以要学习Lua和C#交互,是为了让我们更好的掌握Lua,从而不停留在只会用轮子的阶段。而Dispose方法是在另一个线程里跑的,所有实现了IDisposable的类所占用的内存在GC后不会立刻回收,而是等全部Dispose方法调用完之后回收。Dispose() 里面的代码需要考虑是否被多次调用,如果你在其它地方也调用类的Dispose() 的话,比如 OnDestroy() 等等。这个就用到了之前说的,1代表栈底,因为我们只有一个数据,显然栈底就是我们想要的。,其它Lua也会有类似的接口可以调用。

Zyt 360

从东南大学906被刷到调剂过程(内含个人感想)

介绍了自己在看到初试成绩,到后期复习以及调剂的全过程,当中也包含了自己的复试中的感想,希望大家理性看待。

Philo的博客 2855

Scrapy爬虫之热门网站数据爬取--------第2关

第2关:小说网站玄幻分类第一页小说爬取 任务描述 本关任务:爬目标网页的3本小说保存到本地MySQL数据库,目标网页为全书网玄幻分类首页。 注:考虑到单机(非分布式)爬虫的爬取时间和测试平台的压力,我们不爬更多页数的小说了,可以作为课下作业自己完善。 xpath匹配:循环获取相同标签下的内容 通过网页分析,我们在获取小说的章节名时,发现他们都在标签<DIV class="clearfix dirconone">下的li的a中: 这时,我们可以先把其中所有的li标签先获取到: titles = r

weixin_44949187的博客 2836

XLua系列讲解_C#访问Lua中的function类型

方式1:映射到delegate[*推荐使用] 优点:性能好,类型安全 缺点:要生成代码(如果没有生成代码会抛InvalidCastException异常) --------------------[下面通过一个案例了解具体如何使用]-------------------- 1.新建一个 CSharpCallLua.lua.txt 脚本(代码如下) --[[测试C#访问lua脚本中的 function 类型]] --测试调用无参数且无返回值函数 function PrecMyFunc1(.

a451319296的博客 1141

生成EtherCAT从站XML图片信息方法

详细介绍了EtherCAT从站XML文件中图片元素的生成方法。

kevin1499的博客 2128

XLua学习笔记:Lua调用Unity程序

using System.Collections; using System.Collections.Generic; using UnityEngine; using XLua; public class MyHelloWord : MonoBehaviour { private LuaEnv luaEnv; void Start() { luaE...

chh19941125的专栏 1052

AUTOSAR AP——SM模块

对AUTOSAR AP中状态管理模块SM,从模块定义、总结等多方面进行了介绍。

weixin_43627682的博客 284

Codex 实战 Skills:自动采集一天之内的 Git 提交,一键排版成精美工作日报并发送邮件

特性手动撰写脚本辅助(仅聚合)AI 增强自动化(本文方案)时间成本高(30-60分钟/天)中(5-10分钟/天)低(<1分钟/天)内容质量依赖个人总结能力原始数据堆砌,缺乏提炼专业、结构化、有业务视角信息完整性易遗漏完整,但难以阅读完整,且经过分类筛选维护成本无低中(需维护 Skill 配置)可扩展性低中高(可轻松添加周报、月报)适用场景所有开发者初级开发者追求效率的高级开发者本文详细介绍了一种基于 Codex Agent Skills 的自动日报生成方案。

yueyeguzhuo的专栏 102

【Unity】热更新框架之xLua

xLua是由腾讯维护的一个开源项目,xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能、易用性、扩展性而广受好评。现在,腾讯已经将xLua开源到GitHub。

希望有志同道合的的朋友可以互相学习! 8765

企业级大数据平台的数据网格(Data Mesh)转型之路

随着企业数字化转型的深入,传统大数据平台面临数据孤岛化、治理成本高、业务响应慢等核心痛点。数据网格作为一种新兴的分布式数据管理架构,通过领域驱动设计(DDD)、数据产品化和联邦治理模式,为企业提供了打破数据壁垒、提升数据生产力的全新路径。本文聚焦企业级数据平台从传统架构(数据湖/数据仓库)向数据网格转型的关键技术、实施步骤和组织配套,涵盖技术架构设计、核心算法实现、项目实战案例及工具链推荐。背景介绍:定义转型目标、术语体系与核心挑战核心概念与联系:解析数据网格四大支柱及技术架构图谱核心算法原理。

AI 领航者的博客 1084

Xlua分析:Lua调用C#

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

weixin_45218342的博客 3230

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

xLua游戏中的热更新(基于Unity2018)

什么是热更新 热:就是刚出炉 简单来说就是当游戏某个功能出现bug,或者修改了某个功能,或者增加了某个功能的时候,我们不需要重新下载安装安装包,就可以更新游戏内容。 热更新的好处:不用浪费流量重新下载,不用通过商店审核更加快速,不用重新安装玩家可以更快体验到更新的内容 目前比较受欢迎的热更新方案:uLua tolua xLua 热更新方案 这些热更新方案都是基于Lua语言的...

正版游戏的受害者的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

qq_54476817的博客 8432

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 用VS的控制台 搭建一个简单的服务器
下一篇: unity 对象池的基本运用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值