lyh916

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  201 随笔 :: 0 文章 :: 12 评论 :: 21万 阅读

参考链接:

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,即传递简单类型的参数来代替复杂类型的参数

 

posted on   艰苦奋斗中  阅读(638)  评论(0编辑  收藏  举报
编辑推荐:
· .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 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示