u3d插件xLua[五]xLua特性和生成配置
讲解xLua特性和生成配置一.概述执行XLua-Generate Code菜单后会在XLua/Gen下生成若干文件用于特性C#和Lua互相访问的性能掌握xLua特性和生成配置(静态列表、动态列表)可以对生成过程有更好掌控。参考xLua的配置二.配置这里配置指的是代码中的一种写法让特性应用于代码生成下面以特性[LuaCallCSharp]类名ClassA举例2.1 打标签ClassA上加特性[LuaCallCSharp]using UnityEngine; using XLua; namespace XLuaTest { [LuaCallCSharp] public class ClassA : MonoBehaviour { public void Func1() { } } }执行XLua-Generate Code生成了XLuaTestClassAWrap.cs2.2 静态列表有时无法直接给一个类型打标签比如系统api没源码的库实例化的泛化类型这时可在一个静态类里声明一个静态字段该字段的类型除BlackList和AdditionalProperties之外只要实现了IEnumerableType就可以了这两个例外后面具体会说然后为这字段加上标签ExampleGenConfig.cs中有静态列表的应用我们把ClassA的特性删除然后在ExampleGenConfig中新建一个静态列表加入ClassA执行XLua-Generate Code生成了XLuaTestClassAWrap.cs2.3 动态列表做法是在静态类中声明一个静态属性打上相应的标签在Getter方法中return 一个集合。如此可实现多种效果比如按名字空间配置按程序集配置等等。public static class ExampleGenConfig { [LuaCallCSharp] public static ListType by_property { get { return (from type in Assembly.Load(Assembly-CSharp).GetTypes() where type.Namespace XLuaTest select type).ToList(); } } }执行XLua-Generate Code生成了XLuaTestClassAWrap.cs三.特性3.1 [LuaCallCSharp]一个C#类型加了这个配置执行XLua-Generate Code会生成这个类型的适配代码包括构造该类型实例访问其成员属性、方法静态属性、方法否则将会尝试用性能较低的反射方式来访问。一个类型的扩展方法Extension Methods加了这配置也会生成适配代码并追加到被扩展类型的成员方法上。xLua只会生成加了该配置的类型不会自动生成其父类的适配代码当访问子类对象的父类方法如果该父类加了LuaCallCSharp配置则执行父类的适配代码否则会尝试用反射来访问。对ClassA加[LuaCallCSharp]后生成代码如下文件会变化[LuaCallCSharp] public class ClassA : MonoBehaviour { public void Func1() { } }3.2 [CSharpCallLua]如果希望把一个lua函数适配到一个C# delegate一类是C#侧各种回调UI事件delegate参数比如ListT:ForEach另外一类场景是通过LuaTable的Get函数指明一个lua函数绑定到一个delegate。或者把一个lua table适配到一个C# interface该delegate或者interface需要加上该配置。实测委托FDelegate加[CSharpCallLua]后生成代码DelegateBridge内会加很多代码[CSharpCallLua] public delegate int FDelegate(int a, string b, out DClass c);3.3 [ReflectionUse]一个C#类型类型加了这个配置xLua会生成link.xml阻止il2cpp的代码剪裁。对于扩展方法必须加上LuaCallCSharp或者ReflectionUse才可以被访问到。建议所有要在Lua访问的类型要么加LuaCallCSharp要么加上ReflectionUse这才能够保证在各平台都能正常运行。对ClassA加[ReflectionUse]后生成代码link.xml产生如下变化3.4 [DoNotGen]指明一个类里头的部分函数、字段、属性不生成代码通过反射访问。[DoNotGen]不支持标签它的用法只能用静态列表的形式。使用时需要定义一个static DictionaryType, Liststring的字段Dictionary的key指明的是生效的类value是一个列表配置的是不生成代码的函数、字段、属性的名字。见如下example:public static class ExampleGenConfig { [DoNotGen] public static DictionaryType, Liststring DoNotGenCfg new DictionaryType, Liststring() { { typeof(XLuaTest.ClassA), new Liststring() {Func1} } }; }生成代码后XLuaTestClassAWrap的变化如下3.5 [GCOptimize]用[GCOptimize]修饰后纯值类型 struct 和 enum 可以做到 0 GC包含引用类型的 struct 如果有无参构造虽不能完全 0 GC但能大幅减少 GC 次数如果struct用了有参构造或自动属性这个特性就失效了加上GCOptimize后生成代码如下文件会变化[GCOptimize] [LuaCallCSharp] public struct Pedding { public byte c; }3.6 [AdditionalProperties][AdditionalProperties]是GCOptimize的扩展配置由于GCOptimize只对public的field进行优化AdditionalProperties用来支持struct把field做成是私有的通过property来访问field的情况。其用法不支持标签通常用静态列表写法来看一个例子StrctTest它的字段m_Origin是私有的通过属性origin访问namespace XLuaTest { public struct StrctTest { private Vector2 m_Origin; public Vector2 origin { get { return m_Origin; } set { m_Origin value; } } } }使用静态列表加上AdditionalProperties特性其用的是属性origin不是原有字段m_Origin然后执行生成代码public static class ExampleGenConfig { [GCOptimize()] private static ListType listGCOpt new ListType(){ typeof(StrctTest) }; [AdditionalProperties] private static DictionaryType, Liststring AdditionalProperties new DictionaryType, Liststring(){ {typeof(StrctTest), new Liststring { origin, }}, }; }生成代码新增了对origin的处理3.7 [BlackList]用来指定C#类中成员既不生成wrap代码也在Lua中不能通过反射访问。可通过标签或静态列表实现来看一个例子[LuaCallCSharp] public class ClassA { public void Func1() { Debug.Log(ClassA.Func1); } }function start() local a CS.XLuaTest.ClassA() a:Func1() end显示打印通过标签的方式加上BlackList特性后执行生成代码报错Func1为nil[LuaCallCSharp] public class ClassA { [BlackList] public void Func1() { Debug.Log(ClassA.Func1); } }由于考虑到有可能需要把重载函数的其中一个重载列入黑名单配置方式比较复杂类型是ListListstring对于每个成员在第一层List有一个条目第二层List是个string的列表第一个string是类型的全路径名第二个string是成员名如果成员是一个方法还需要从第三个string开始把其参数的类型全路径全列出来。例如下面是对 GameObject 的一个属性以及FileInfo的一个方法列入黑名单[BlackList] public static ListListstring BlackList new ListListstring() { new Liststring(){UnityEngine.GameObject, networkView}, //new Liststring(){ typeof(UnityEngine.GameObject).FullName, networkView}, new Liststring(){System.IO.FileInfo, GetAccessControl, System.Security.AccessControl.AccessControlSections}, //new Liststring(){ typeof(System.IO.FileInfo).FullName, GetAccessControl,typeof(System.Security.AccessControl.AccessControlSections).FullName }, };因此判断项目中是否用静态列表加黑名单只需要搜索ListListstring就可以了

相关新闻

2026国内精密行星减速机厂家最新解析推荐

2026国内精密行星减速机厂家最新解析推荐

工业自动化设备生产中,长寿命行星减速机的品质直接决定整条生产线的运行稳定性与后续运维成本,不同厂家的产品在精度、寿命、噪音控制和适配性上差异不小,选型失误很容易导致后期频繁检修、产能下降。 本文针对国内长寿命行星减速机主流厂家&…

2026/10/7 10:35:36 阅读更多 →
2026年数学建模国赛A题算法(12):相平面分析与稳定性判断在自治系统中的应用研究

2026年数学建模国赛A题算法(12):相平面分析与稳定性判断在自治系统中的应用研究

摘要 相平面分析法是研究二维自治系统动力学行为的重要几何工具,它通过在相空间中描绘轨线的分布与走向,直观地揭示系统的稳定性特征和全局演化规律。本文系统阐述了相平面分析的核心理论框架,包括奇点分类、极限环判据以及Lyapunov第二方法,并在此基础上提出了一套融合数…

2026/10/2 0:37:18 阅读更多 →
金仓数据库问题汇总

金仓数据库问题汇总

1. cache lookup failed for type 536871955 com.kingbase8.util.KSQLException: 错误: cache lookup failed for type 536871955; uncategorized SQLException; SQL state [XX000]; error code [0]; 错误: cache lookup failed for type 536871955; nested exception is com.…

2026/10/8 1:23:37 阅读更多 →

最新新闻

VmwareHardenedLoader实战:隐藏虚拟机指纹的加载器完全指南

VmwareHardenedLoader实战:隐藏虚拟机指纹的加载器完全指南

简介:面向逆向分析与安全测试场景的VMware加固工具,通过内核驱动在运行时修补SystemFirmwareTable,清除“VMware”、“Virtual”等可检测特征,使虚拟机客户机规避VMProtect 3.2、Safengine及Themida的反虚拟机机制。当前仅支持Win…

2026/10/10 6:29:55 阅读更多 →
CPU核心概念解读:从核心、缓存到功耗墙,彻底参透处理器性能

CPU核心概念解读:从核心、缓存到功耗墙,彻底参透处理器性能

CPU的核心概念,听起来像一门玄学,网上测评满天飞,各种参数看得人眼花,但真要自己攒机、调优或者写代码优化性能的时候,又觉得那些概念隔着什么东西。做了这么多年开发和高性能相关的折腾,我最大的体会是&am…

2026/10/10 6:29:55 阅读更多 →
下载提速的底层逻辑:从在线解析工具到直链的正确用法

下载提速的底层逻辑:从在线解析工具到直链的正确用法

先说个很多人没想透的事:迅雷这类下载工具,速度上不去的时候,绝大多数原因不是“软件坏掉了”,也不是非要开会员不可,而是你根本没把下载路径上的几个环节挨个打通。标题里提到的“在线解析工具”,更像是在…

2026/10/10 6:29:55 阅读更多 →
零改造升维:单路视频直接可计算阵地态势底座技术方案

零改造升维:单路视频直接可计算阵地态势底座技术方案

摘要针对当前阵地态势感知领域普遍存在的硬件改造成本高、设备部署复杂、场景适配性差、数据不可计算、态势虚实脱节等行业痛点,本文基于耿文海团队原创像素升维理论,提出零改造升维、单路视频直接可计算的阵地态势底座全新技术体系。区别于传统态势系统…

2026/10/10 6:29:55 阅读更多 →
MediaPipe双模疲劳与姿势检测系统实战指南

MediaPipe双模疲劳与姿势检测系统实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 6:29:55 阅读更多 →
JSP+SQL Server学生信息管理系统开发实战:从环境搭建到避坑指南

JSP+SQL Server学生信息管理系统开发实战:从环境搭建到避坑指南

简介:这是一套基于JSP与SQL Server的学生信息管理系统设计与实现项目,采用B/S架构,适合Java Web课程设计、毕业设计及初阶开发者学习参考。资源内含项目全套源码与完整文档,源码已经测试校正可正常运行,配套说明文档与…

2026/10/10 6:28:55 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →