参考链接:
https://www.jianshu.com/p/07dc38e85923
https://www.cnblogs.com/zwywilliam/p/5999924.html
一.创建Vector3
在xlua中,创建Vector3有2种方式
1.使用userdata,即通过c#中new一个Vector3,然后返回给lua。例如:CS.UnityEngine.Vector3(20, 30, 40)
2.使用lua的table,此时不会和c#进行交互,例如Vector3.New(10, 11, 12)
二.获取Vector3
例如local pos = transform.position,这个过程和上面创建Vector3的第一种方法是一样的
三.设置Vector3
在xlua中,设置Vector3也有2种方式,和上面创建Vector3是对应的
1.使用userdata,例如b.transform.position = CS.UnityEngine.Vector3(20, 30, 40)
2.使用lua的table,例如b.transform.position = Vector3.New(10, 11, 12)
四.xlua中对Vector3等结构体的优化
需要配置GCOptimize属性,实际上常用的UnityEngine命名空间下的几个结构体,都配置了该属性。如果不配置该属性,生成的代码在传递这些结构体时,会有装箱拆箱的操作,从而导致gc
五.Vector3优化方案总结
1.使用lua的table来实现Vector3,减少与c#的交互
2.使用静态方法, 因为使用实例方法例如gameObject.transform.position,像gameObject、transform在lua中是一个userdata,传到c#中会找到对应的c#对象,这过程中涉及到查找原表、查找c#对象、返回userdata等等的操作,比较繁琐耗时
3.通过传递3个数字x,y,z来代替传递1个table,即传递简单类型的参数来代替复杂类型的参数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?