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/8/13 9:57:50 阅读更多 →
2026年数学建模国赛A题算法(12):相平面分析与稳定性判断在自治系统中的应用研究

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

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

2026/8/13 9:57:50 阅读更多 →
金仓数据库问题汇总

金仓数据库问题汇总

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/8/13 9:57:50 阅读更多 →

最新新闻

代码的第一把切割刀:用边界终结“面条系统”的坍塌

代码的第一把切割刀:用边界终结“面条系统”的坍塌

专栏《信息技术》 | 计算系统进化论 (01/12) 一万行代码里的“排雷”暗战

2026/8/13 10:43:14 阅读更多 →
大模型Token全解析:从核心原理到实战优化

大模型Token全解析:从核心原理到实战优化

1. 项目概述:从“乐高积木”的比喻说起 最近和不少刚接触大模型的朋友聊天,发现一个挺有意思的现象:大家聊起GPT、Claude这些模型时,都能说上几句,但一提到“Token”这个词,很多人就有点懵了。有人觉得它像…

2026/8/13 10:43:14 阅读更多 →
2026年热门的存储芯片热流仪加工哪家精度高实力公司推荐

2026年热门的存储芯片热流仪加工哪家精度高实力公司推荐

编辑 | 深圳市丞坤仪器科技有限公司现在存储芯片行业不断升级,对可靠性测试的要求越来越细化,存储芯片热流仪作为存储芯片温度特性、热稳定性测试的核心设备,很多采购和研发负责人在选购的时候都会有疑问:存储芯片热流仪销售厂家哪…

2026/8/13 10:43:14 阅读更多 →
《模拟人生4》NOCC房屋安装指南:从文件部署到功能验证全流程

《模拟人生4》NOCC房屋安装指南:从文件部署到功能验证全流程

这次我们来看一个《模拟人生4》的玩家自制房屋作品——“秘密森林女巫树屋 NOCC房屋”。这个项目不是技术工具或AI模型,而是一个游戏模组(Mod),但它同样涉及文件分享、安装部署、功能验证和兼容性排查,对喜欢自定义游戏…

2026/8/13 10:43:14 阅读更多 →
元初混沌体系架构 第二卷 第四十篇 高频信号宇宙远距离衍射补偿模型

元初混沌体系架构 第二卷 第四十篇 高频信号宇宙远距离衍射补偿模型

第四十篇 高频信号宇宙远距离衍射补偿模型承启前置 超宽带穿透闭环与高频衍射短板补齐第三十九篇《超宽带频谱星际穿透优势与边界约束》已永久定稿,完整构建7G超宽带全域穿透机理、五大统治级优势、四类星际专属约束与鸿蒙制衡化解体系,彻底完成太赫兹超…

2026/8/13 10:43:14 阅读更多 →
微服务配置管理实战:Nacos Config核心原理与Spring Cloud集成指南

微服务配置管理实战:Nacos Config核心原理与Spring Cloud集成指南

1. 项目概述:为什么我们需要Nacos Config?在微服务架构里,配置管理是个老生常谈但又极其关键的问题。想象一下,你手头有几十个甚至上百个服务,每个服务都有自己的数据库连接、缓存地址、业务开关。如果这些配置都写在每…

2026/8/13 10:42:13 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →