Unity实验室之XLua调用C#程序

xLua中调用C#中操作方法(无返回值,没有ref out修饰参数 最终修改参数值得方法) 本人小白,最近在用xLua重构C#代码中遇到了难题,如下: Vector3[] V3Arr = new Vector3[4] RectTransform.GetWorldCorners(V3Arr) 就是这样一个方法,Unity官方文档介绍,首先实例化一个Vector3类型的数组,作为参数传入到方法中,执行方法后将调用实例的RectTransform四个点的世界坐标填充到数组中。顺序依次为左下、... 阅读详情

介绍

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

创建游戏对象

-example.lua.txt

local obj1 = CS.UnityEngine.GameObject()
local obj2 = CS.UnityEngine.GameObject('Hello')
print(obj1,obj2)

省略命名空间

-example.lua.txt

local GameObject = CS.UnityEngine.GameObject
local obj1 = GameObject();
local obj2 = GameObject('Hello')
print(obj1,obj2)

访问Unity的静态类

-example.lua.txt

local GameObject = CS.UnityEngine.GameObject
local Time = CS.UnityEngine.Time
print('deltaTime:',Time.deltaTime)
Time.timeScale = 0.5
print('hello',GameObject.Find('hello'))

创建自定义类的实例

//Example.cs
public class Character{
    public int m_id;
    public string m_name;
    public void Log(){
        Debug.Log(m_id+":"+m_name);
    }
}
- example.lua.txt
local Character = CS.Character
local character = Character()
character.m_id = 25
character.m_name = 'hello'
print(character.m_id)
print(character.m_name)
character:Log()

调用静态变量和方法

//Example.cs
public class Manager{
    public static int m_score;
    public static void Log(){
        Debug.Log(m_score);
    }
}
-example.lua.txt
local Manager = CS.Manager
Manager.m_score = 100;
Manager.Log();
print(Manager.m_score)

调用重载函数

//Example.cs
public class Character{
    public void Log(int id){
        Debug.Log(id);
    }
    public void Log(string name){
        Debug.Log(name);
    }
}
-example.lua.txt
local Character = CS.Character
local character = Character()
character:Log(25)
character:Log('hello')

使用默认参数调用方法

//Example.cs
public class Character{
    public void Log(int id=1,string name="hello"){
        Debug.Log(id+":"+name);
    }
}
-example.lua.txt
local Character = CS.Character
local character = Character()
character:Log()
character:Log(25)
character:Log(25,'hello')

使用变长参数调用方法

//Example.cs
public class Character{
    public void Log(params string[] names){
        foreach(var n in names){
            Debug.Log(n);
        }
    }
}
-example.lua.txt
local Character = CS.Character
local character = Character()
character:Log()
character:Log('hello')
character:Log('hello','world')

调用扩展方法

//Example.cs
using XLua;
public class Character{

}
[LuaCallCSharp]
public static class CharacterExt{
    public static void Log(this Character self){
        Debug.Log("ext method");
    }
}
-example.lua.txt
local Character = CS.Character
local character = Character()
character:Log()

使用ref 和out关键字

//Example.cs
public class Character{
    public void Attack(ref int hp,out int exp){
        hp = 25;
        exp = 100;
    }
}
-example.lua.txt
local Character = CS.Character
local character = Character()
local hp,exp = character:Attack()
print(hp,exp)

使用枚举类型

//Example.cs
public enum ParamType{
    FIRE,
    WATER,
    GRASS
}
-exmaple.lua.txt
local ParamType = CS.ParamType;
local ParamType = ParamType.FIRE
print(ParamType)
print(ParamType.__CastFrom(1))
print(ParamType.__CastFrom('GRASS'))

使用delegate

//Example.cs
using System;
public class Character{
    public Action<string> OnLog = str=>Debug.Log("C#: "+str);
}
--example.lua.txt
local Character = CS.Character
local character = Character()
character.OnLog('hello')
local function lua_delegate(str)
    print('Lua:',str)
end
character.OnLog = character.OnLog + lua_delegate
character.OnLog('hello')
character.OnLog = character.OnLog - lua_delegate
character.OnLog('hello')

事件的使用

//Example.cs
using System;
public class Character{
    public event Action<string> OnLog;
    public void Log(string str){
        if(OnLog == null)return;
        OnLog(str);
    }
}
--example.lua.txt
local Character = CS.Character
local character = Character()
local function lua_callback(str)
    print(str)
end
character:OnLog('+',lua_callback)
character:Log('hello')
character:OnLog('-',lua_callback)
character:Log('hello')

typeof的使用

--example.lua.txt
local GameObject = CS.UnityEngine.GameObject
local ParticleSystem = CS.UnityEngine.ParticleSystem
local gameObject = GameObject()
gameObject.AddComponent(typeof(ParticleSystem))

接口

//Example.cs
public interface ICharacter{
    void Log();
}
public class Character:ICharacter{
    public void Log(){
        Debug.Log('hello')
    }
}
--example.lua.txt
local Character = CS.Character
local character = Character()
local ICharacter = CS.ICharacter
character:Log()
cast(character,typeof(ICharacter))
character:Log()
Unity C#与Xlua的交互 Lua调用C# LuaCallCSharp 继上篇的C#调用Lua之后,这篇主要记录Unity中使用XLua是如何在Lua代码中调用C#代码的。相关的文档资料与上篇相同,这里就不赘述了。除了官方的Demo,自己也加了个小demo,对应文章的内容,在MyExamples目录下的LuaCallCSharp。LuaCallCSharp备注:Lua Call C#代码的时候,C#处生成的代码基本都需要打标签[LuaCallCSharp]。关于标签的... 阅读详情

相关推荐

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

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

王王王渣渣的博客 1万+

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

Xlua调用C#方法。

liuyongjie1992的博客 1914

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

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

夜槿笙歌的博客 7948

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

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

qq_54476817的博客 8432

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

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

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

XLua-Unity框架初探

文章目录前言应用场景XLua 常用 API框架实例搭建需求实现实例,实现一朵云的运动其他 前言 Lua由于其简单易用,方便热更等性质,一直是游戏行业的首推脚本语言。Unity引擎也诞生了很多款为其适配的Lua虚拟机运行环境,主要有XLua,SLua,ToLua和ULua,本文不会着力比较这几种框架的实现差异,只讨论其中背靠大厂腾讯的XLua框架。 应用场景 UI逻辑代码 Hotfix 网络层 除...

PureDesigner的博客 4078

Unity--XLua调用C#

Unity--XLua调用C#

qq_40669895的博客 1770

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

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

LAMMPS实操系列(四): 高熵合金FCC-CoCrCuFeNi的退火模拟

我们对FCC-CoCrCuFeNi的退火模拟思路主要是,首先将材料以均匀的速率用100 ps从300 K升温至1000 K,然后在1000 K的温度下平衡100 ps,随后以均匀的速率用100 ps从1000 K降温至300 K,随后通过共轭梯度下降法做静力学结构优化得到退火后的结构。由于FCC-CoCrCuFeNi高熵合金被认为是潜在的工程结构材料[1],接下来我们将对退火前后的结构进行压缩模拟,对比退火前后FCC-CoCrCuFeNi高熵合金的力学性能变化,敬请各位读者关注我们的更新。

Ceshigo_CD的博客 4836

Gamit10.71添加新的天线类型

添加新的天线类型需要涉及到四个文件:antmod.dat,rcvant.dat,guess_rcvant.dat,hi.dat。 注意:格式要一致!!! 举例说明,我要添加一个JCA229的天线(带JCAD天线罩),对应接收机使用的是南方的South Net-S9。

Penny的博客 2710

【Unity】热更新框架之xLua

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

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

均值场博弈_平均场博弈(mean field game)

The New Big Fish Called Mean-Field Game Theory原文链接http://www.science4all.org/article/mean-field-games/​www.science4all.org主要内容在经典博弈论中,它对附近其他鱼类的行为做出反应。这是非常复杂的,因为不同的鱼类之间会有大量的相互作用。这意味着经典博弈论对应于一长串高度耦合的方程。...

weixin_34773479的博客 3679

Unity-XLua(38)-定义C#泛型方法与扩展方法

一: lua 调用C#,需要在Xlua中生成“适配代码”,则在这个类打入一个[luaCallCSharp] 的标签。二: 如果lua调用C#的系统API ,则无法拿到源代码,无法打入标签。则 使用“静态列表”方式解决。然后把以上代码放入一个静态类中即可。三: 实际开发过程中,lua 调用C# 用的比较多。xlua 的优点体现的没有必要每次改的时候,都要生成代码。主要原理是依赖于编译器环境下,利用反射来动态生成代码接口。

Asincereman的专栏 2427

项目模块提取生成jar包上传到nexus供其他项目使用

项目场景: 微服务项目当中的某一个模块其他项目进行复用,资源管理搭建的有私服 nexus。 问题描述: 如果把功能用到其他项目,代码重复量太大,不想些重复的代码。 原因分析: 如果把这个模块单独提取出来进行复用,至于操作数据库的功能,使用远程调用进行数据库操作,这样就能解决相同模块重复编写的工作。量。 解决方案: 首先对模块代码进行封装提取,把一些用到的参数提取出来,以传参的形式来对参数进行传递。这个需要根据具体的情况进行代码提取,提取之后把这个模块的代码进行打包,打包可以借助开发工具进行打包(记得使用 d

lierjun 的专栏 449

论文必备 - YOLO26热力图可视化,支持指定模型,指定显示层,设置置信度,以及9种可视化实现方式

本文带来的是YOLO26热力图可视化功能,支持指定模型,指定显示层,设置置信度,以及9种可视化实现方式。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如Centralized Feature Pyramid for Object Detection这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。在项目

Limiiiing的博客 429

Unity中 Xlua使用整理(一)

记录Unity中使用Xlua

weixin_50702814的博客 3209

利用CAT12做皮层指标的统计分析及可视化笔记记录

利用CAT12做皮层指标的统计分析及可视化 文章目录利用CAT12做皮层指标的统计分析及可视化前言一、统计步骤1.Basic Models2.Estimate Surface Models3.Results二、可视化1.t值可视化2.p值可视化 前言 本来没有打算做SBM的,因为自己是新手小白,许多操作都不太懂,但最后还是打算做一下,于是就从上周末开始将很久之前跑VBM得到的surf文件夹中的数据捡起来继续做皮层分析,因为之前看了一个博主的博客,关于如何做SBM已经讲得非常清楚了,但是在统计及可视化这里,我

weixin_52073820的博客 8094

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

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

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

【项目实战】AES实施应符合NIST密码算法验证程序

AES由美国国家标准与技术研究院(NIST)制定。NIST是负责开发和维护美国政府使用的技术标准的机构,包括加密标准。

奶爸的编程之路,也就一周冷个三天 765

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

XLua与C#的简单交互

由于本人也是刚刚接触XLUA,所以, 今天的这篇文章就简单的讲述一下XLUA调C# ,C#调XLUA 的基本运用。 开始是C#调用LUA: 首先先下载Xlua文件 解压 把需要的文件导入到unity中 链接:https://pan.baidu.com/s/1OPivTn54SQjNl3H3IBHMrQ 提取码:twgf 导入完成以后新建一个CS脚本 ,在CS脚本中引用XLUA的命...

fineboby的博客 2042

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Unity】xLua及热更新

本文主要讲xLua的基本使用。看完有个基本认识还是可以了,简单的热更操作还是可以做到的,但更多细节内容依旧需要从官方文档中了解、学习。

Davidorzs的博客 2210

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Xlua分析:Lua调用C#

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

weixin_45218342的博客 3230

Unity中使用xLua基础

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

Kayn_Liu的博客 4200

热更新、Xlua中Lua调用C#代码

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值